从视图模型更改wpf样式

本文关键字:wpf 样式 视图 模型 | 更新日期: 2023-09-27 18:00:35

我有一个数据模板:

 <DataTemplate
            DataType="{x:Type local:ConnectionViewModel}"
            >
            <!-- The connection is represented by a curved arrow. -->
            <ca:CurvedArrow
                    StrokeThickness="2"
                    Points="{Binding Points}"
                    Fill="{StaticResource connectionBrush}"
                    Stroke="{StaticResource connectionBrush}"
                />
        </DataTemplate>

这代表了我认为的所有连接器。我想做的是为视图模型中特定的特定连接器设置不同的填充和笔划。我怎样才能做到这一点?

从视图模型更改wpf样式

您应该避免在视图模型中使用任何UI对象。

对于上面提到的用例,您可以使用Converters,并继续在视图模型中只包含业务对象级别的信息。

例如,Connection类可以持有enum : ConnectorType {Arrow,Circle,Rectangle}的属性,然后可以编写一个转换器,将枚举类型转换为所需的画笔。下面的示例代码:

//Inside Resources. local=namespace where you have this converter
   <local:ConnectorType2BrushConverter x:Key="ConnectorType2BrushConverter" />
....
    <ca:CurvedArrow
                        StrokeThickness="2"
                        Points="{Binding Points}"
                        Fill="{Binding Path=ConnectorType, Converter={StaticResource ResourceKey=ConnectorType2BrushConverter}"
                    />
    ....
        public class ConnectorType2BrushConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                var connectorType = (ConnectorType)value;
                if (connectorType == ConnectorType.Arrow)
                {
                    return new SolidColorBrush(Color.FromRgb(1, 1, 1));
                }
                else    .....
            }
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }