【问题标题】:How can I change styles of XAML file using Data Binding?如何使用数据绑定更改 XAML 文件的样式?
【发布时间】:2010-12-19 11:22:13
【问题描述】:

我将对象集合绑定到 WPF 中的列表框,为简单起见,我们将说我绑定的对象具有 3 个属性:名称、URL、IsBold。我想要做的是,如果 IsBold 设置为 true,它是否显示不同,再次作为示例,我想将出现 Name 的 TextBlock 设置为粗体。这样的事情甚至可能吗?如果我的一个属性是特定值,我可以使用不同的样式或其他东西吗? (我可以在 XAML 中执行 if/else 之类的操作吗)?我真的不知道从哪里开始。

假设我的 DataTemplate 中有这个

<TextBlock Style="{StaticResource notBold}" Text="{Binding Path=Name}"></TextBlock>

如果 IsBold 为该特定项目设置为 true,我希望它是(注意样式从“notBold”更改为“isBold”)

<TextBlock Style="{StaticResource isBold}" Text="{Binding Path=Name}"></TextBlock>

或类似的东西。我猜是更普遍的问题。是否可以根据数据绑定的项目更改某物的外观?如果这是不可能的,怎么会做这样的事情?以某种方式通过代码隐藏?

谢谢

【问题讨论】:

    标签: wpf data-binding xaml styles


    【解决方案1】:

    您通常会为列表中的对象编写一个 DataTemplate,然后让 DataTrigger 根据 IsBold 属性设置 TextBlock/TextBox 的 Fontweight。

    <DataTemplate DataType="DataItem">
        <TextBlock x:Name="tb" Text="{Binding Name}"/>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding IsBold}" Value="true">
                <Setter TargetName="tb" Property="FontWeight" Value="Bold" />
            </DataTrigger>
            <DataTrigger Binding="{Binding IsBold}" Value="false">
                <Setter TargetName="tb" Property="FontWeight" Value="Normal" />
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
    

    然后,您可以将 DataItems 列表设置为 ComboBox 的 ItemsSource 属性(通过数据绑定或直接在代码隐藏myComboBox.ItemsSource=myDataItems 中)。其余的由 WPF 为您完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      相关资源
      最近更新 更多