【问题标题】:Style change Binding Path value [duplicate]样式更改绑定路径值[重复]
【发布时间】:2015-07-20 23:28:46
【问题描述】:

我在 2-3 处有此代码,常见的是样式除了绑定路径“BidMovement”需要在其他地方更改(“AskMovement”、“StaleMovement”)。 这是否可以在 WPF 中定义样式并在实际使用时更改某些元素(绑定路径)?

<Border Name="BidBorder" Grid.Column="0" Padding="5" Margin="5" CornerRadius="10">
   <Border.Style>
      <Style TargetType="{x:Type Border}">
         <Style.Triggers>
            <DataTrigger Binding="{Binding BidMovement}" Value="{x:Static crosses:PriceMovement.Up}">
               <Setter  Property="Background" Value="Green" />
            </DataTrigger>
            <DataTrigger Binding="{Binding BidMovement}" Value="{x:Static crosses:PriceMovement.Down}">
               <Setter  Property="Background" Value="OrangeRed" />
            </DataTrigger>
            <DataTrigger Binding="{Binding BidMovement}" Value="{x:Static crosses:PriceMovement.Stale}">
               <Setter  Property="Background" Value="DarkOrange" />
            </DataTrigger>
         </Style.Triggers>
      </Style>
   </Border.Style>
</Border>

【问题讨论】:

  • 我将创建一个带有 MovementType DP 的 UserControl,该 DP 在其回调函数中更改背景。然后你只需要像这样使用它: 而不是每次都输入完整的样式。

标签: c# wpf xaml


【解决方案1】:

创建一个ValueConverter,将Movements 转换为Brushes。它看起来像这样:

public class MovementToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var movement = value as Movement;
        if (movement == PriceMovement.Up)
            return Brushes.Green;
        //return values for the other cases accordingly

        return Brushes.Transparent; //default
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

要使用它,请将应用程序的命名空间添加到命名空间,并将转换器作为静态资源添加到 windows 资源:

<Window //other attributes omitted for brevity
    xmlns:l="clr-namespace:YourApplication">
<Window.Resources>
    <l:MovementToBrushConverter x:Key="converter" />
</Window.Resources>

然后在你的边框上定义绑定并添加值转换器,如下所示:

<Border Background="{Binding BidMovement, Converter={StaticResource converter}}"></Border>

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 2021-10-19
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多