我有一個要求,允許選擇在只讀屏幕顯示的文字。格式問題試圖創建一個WPF標籤模板,讓文本選擇
我們開發一個簡單的解決一個想出了使用TextBox
而不是標籤或TextBlock的,具有以下樣式:
<Style x:Key="ControlData" TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="TextWrapping" Value="Wrap" />
<!-- unrelated properties ommitted -->
</Style>
我不喜歡使用一個TextBox存在的想法,除其他事項外,因爲它迫使我使用Binding Mode=OneWay
爲只讀屬性,所以我試圖定義我可以申請到標籤的樣式,以獲得相同的結果:
<Style x:Key="SelectableLabel" TargetType="Label">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<TextBox Style="{StaticResource ControlData}"
Text="{Binding Path=Content, Mode=OneWay,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Label}}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
的問題是,一些我的綁定有StringFormat
集,那就是迷路了。
- 有沒有辦法保持外部綁定的格式?
- 我應該創建我的模板/裝訂不同?
- 有一個完全不同的做法,是比這更好的?
- 我應該停止與挑剔和與文本框去?
@wangburger:你是什麼意思? – 2011-05-09 15:59:51
使用「TextBox」有什麼問題?你到目前爲止所說的只是你不喜歡它。爲什麼? – 2011-05-09 16:23:34
@RobertRossney:因爲TextBox是一個**輸入**元素,爲其設置了基礎結構,而不是用於只讀顯示。這也迫使我添加'Mode = OneWay'到我的所有綁定中,而無需setter。 – 2011-05-09 16:38:26