2013-08-11 8 views
8

Tôi có TextBlock với 2 Run thẻ và một Linebreak:Ẩn <Run /> thẻ trong TextBlock - WPF

<TextBlock> 
     <Run Text="TopText"/> 
     <LineBreak/> 
     <Run x:Name="bottomRun" Text="Bottom text"/> 
    </TextBlock> 

Tôi muốn ẩn thứ hai Run thẻ trong mã phía sau. Nhưng không có tài sản Visible ... Tại sao lại như vậy? Giải pháp nào tốt nhất để ẩn chỉ một thẻ Run?

Trả lời

9

Visibility là thuộc tính trong lớp UIElement mà tất cả các điều khiển giao diện người dùng lấy được nhưng Run không xuất phát từ nó.

tốt nhất bạn có thể làm là để thiết lập Text tài sản để String.Empty trong mã đằng sau:

bottomRun.Text = String.Empty; 
+0

Rất tệ, điều này dường như không hoạt động từ Style – tofutim

+0

@tofutim Nó hoạt động từ Style. Nhưng bạn không thể ghi đè lên trong những thứ kiểu được đặt trực tiếp trong đối tượng; bạn cần đặt giá trị * only * theo kiểu, và sau đó ghi đè lên nó trong trình kích hoạt bên trong kiểu. – ANeves

+0

@ANeves - Bạn có chắc chắn không? bởi vì như đã nói 'Chạy' không có bất kỳ thuộc tính' Hiển thị' nào được liên kết với nó, thì làm thế nào nó có thể được thiết lập từ Style? –

1

Đôi khi điều này là thích hợp - nhưng không lý tưởng nếu bạn thực sự cần các văn bản để 'chạy' và bạn muốn có một tự động linebreak trong phần tử inline.

<TextBlock> 
    <InlineUIElement><TextBlock Visibility="Collapsed" Text="TopText"/></InlineUIElement> 
    <LineBreak/> 
    <Run x:Name="bottomRun" Text="Bottom text"/> 
</TextBlock> 
+0

Điều đáng nói là '' phải là con của ''. –

4

TextBlock bạn đã có là khá nhỏ. Khi đối mặt với một tình huống tương tự, tôi đã nhân bản nó và ràng buộc thuộc tính Visiblity trên TextBlock.

<TextBlock Visibility="{Binding Path=LicenseValid, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false }"> 
     <Run Text="TopText"/> 
     <LineBreak/> 
     <Run x:Name="bottomRun" Text="Bottom text"/> 
    </TextBlock> 

<TextBlock Visibility="{Binding Path=LicenseValid, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false }"> 
     <Run Text="TopText"/> 
     <LineBreak/> 
     <Run x:Name="bottomRun" Text="Bottom text"/> 
    </TextBlock> 

Bộ chuyển đổi được khai báo phù hợp, được xác định và có thông số 'đảo ngược'.

1

Tôi biết OP muốn giải quyết điều này bằng cách sử dụng một TextBlock duy nhất với Chạy trong đó, nhưng tôi đã giải quyết được vấn đề với một StackPanel theo chiều ngang của TextBlocks. Đó là một giải pháp nặng hơn vì có nhiều điều khiển hơn, nhưng hoạt động.