0
<TextBlock Visibility="{Binding IsTrue1, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Visibility="{Binding IsTrue2, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Visibility="{Binding IsTrue3, Converter={StaticResource BooleanToVisibilityConverter}}"/>

“转换器”属性在 Binding 上,而不是在 TextBlock 上,所以我不能在 TextBlock 上使用样式。

每个绑定都是不同的,因此我无法创建单个 Binding 资源。

那么,如何避免设置相同的转换器 3 次呢?

编辑:我会尝试解释更多。我正在寻找一种为绑定对象提供默认转换器的方法,这样当我使用同一个转换器创建许多绑定时,我就不必一遍又一遍地设置同一个转换器。

所以,如果我可以这样写:

<Grid DefaultBindingConverter="{StaticResource BooleanToVisibilityConverter}">
    <TextBlock Visibility="{Binding IsTrue1}"/>
    <TextBlock Visibility="{Binding IsTrue2}"/>
    <TextBlock Visibility="{Binding IsTrue3}"/>
    ...

显然这是不正确的,只是为了说明我的想法。

希望这次我解释得足够清楚。

4

1 回答 1

0

让我们谈谈你问题中的两个问题。

1. 单一资源

看来您对StaticResourceConverter 中的定义有误解。例如BooleanToVisibility,您编写的代码不是三次复制的对象。它只声明了一次,使用了三次。

再举一个例子,如果你的代码如下

int i;
i=1;
i=2;
i=3;

你声明i了一次,使用了三遍。同样,StaticResource您使用的也是类似的作品。您可以声明或标记x:Key="BooleanToVisibility",就是这样。<UserControl.Resources><Application.Resources>

2.样式使用

如果你想在 TextBlock 中设置 Style,你可以使用下面的方法。

<TextBlock Visibility="{Binding Number1, Converter={StaticResource BooleanToVisibilityConverter}}">
    <TextBlock.Style>
        <Style>
            <!-- Define your Styles here -->                
        </Style>
    </TextBlock.Style>
<TextBlock>

正如您在上面看到的,您可以将StyleXAML 属性扩展为内部标记。

==编辑==

我现在明白你的意图了。您可能希望像 DataContext 一样以分层继承方式应用 Converter。

可悲的是,据我所知,这在 XAML 下是不可能的。因为每个 Binding 只是一个属性,因此必须一个一个地应用它。

可能的解决方法是使用代码隐藏来枚举元素并应用它们。

for(int i=0;i<3;i++){
    var textbox = (TextBox)this.FindName("TextBox" + i);
    var binding = new Binding("IsTrue" + i);
    binding.Converter = new YourDefaultConverter();
    textbox.SetBinding(TextBox.TextProperty, binding);
}

希望这有助于减少你的家务。

于 2013-02-02T15:06:00.177 回答