看不到穿过森林的树木。 尝试一个简单的数据绑定,我想用转换器格式化值。 (在此转换器示例中,不显示0的数字数据。)
资源:
<conv:FormattingConverter x:Key="FormattingConverter"/>
<Style x:Key="EGTSTextBoxInt" TargetType="TextBox">
<Setter Property="Background" Value="{StaticResource CC_BACKGROUND}" />
<Setter Property="Foreground" Value="{StaticResource CC_FOREGROUND}" />
<Setter Property="FontFamily" Value="{StaticResource DefaultFont}" />
<Setter Property="FontSize" Value="{StaticResource DefaultFontSize}" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="FontStyle" Value="Normal" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center"
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="IsReadOnly" Value="True" />
</Style>
文本框:
<TextBox Name="Bill_Item"
Grid.Column="6"
MinWidth="46"
MinHeight="23"
Style="{StaticResource EGTSTextBoxInt}"
Text="{Binding Path=Item, Mode=TwoWay,
Converter={StaticResource FormattingConverter},
ConverterParameter=\{0:G\}}" />
我想要做的是将样式中嵌入的Converter代码嵌入,这样我就不必在每个Text =行中拼出它。
在XAML后面添加代码以执行此操作不是一种选择!
我正在寻找一种纯XAML方法。
我仍在努力了解样式中某些事情是如何完成的。
布赖恩
答案 0 :(得分:0)
TextBox的Text
属性与数据有关。 Style
属性与数据的外观有关。将转换器附加到样式是没有意义的。
编辑:我想我现在正在试图说些什么。您希望在一个位置Text="{Binding Path=Item}"
和<Setter Property="Text" Value="~somehow get the converter in here and have it applied to the existing text property which is bound to Items~" />
正如mydogisbox所提到的,我不认为你可以在这两个地方把这些想法分开。
答案 1 :(得分:0)
Converters
用于将一个值转换为另一个值,因此如果没有正在转换的值,就无法使用它们
但是,您可以在绑定中使用StringFormat
来格式化值而无需转换器
<TextBox Text="{Binding Path=Item, StringFormat=G}" />
你也可以创建一个继承自Binding
类的类并设置默认的StringFormat
,虽然我觉得这比它的价值更麻烦
<TextBox Text="{local:NumberBinding Path=Item}" />
如果您使用的是标签而不是TextBox,则可以将样式设定器应用于ContentStringFormat
,这会将格式应用于标签的Content
<Style TargetType="{x:Type Label}">
<Setter Property="ContentStringFormat" Value="G" />
</Style>
答案 2 :(得分:0)
有几种方法可以做到这一点 但在你开始之前:
1)定义自定义标记扩展
我们的想法是继承Binding标记扩展,允许您编写Text ="{Binding SomeProperty}"
你可以找到一个自己绑定here的人的例子
此解决方案不允许您将该功能放入样式中。
2)定义附加属性
这将修改控件的默认属性的绑定(在您的情况下,Text是TextBox的默认属性,因为您可以执行<TextBox>my text</TextBox>
),以便自动使用所需的转换器。
这实际上允许您将此附加属性设置为样式。然而,这是非常糟糕的做法。这是一个很糟糕的魔术弦。
3)不要这样做,只是不要这样做。
每次都写下转换器。