【问题标题】:Binding value of a setter property to a Code Behind Property Color将 setter 属性的值绑定到 Code Behind 属性颜色
【发布时间】:2021-10-16 10:25:55
【问题描述】:

我正在努力寻找一种方法来使用我自己的属性 (SelectedRowBackColor) 设置 Setter.Value。 这行 XAML 不起作用:

<SolidColorBrush Color="{Binding XPath=SelectedRowBackColor}"></SolidColorBrush>

有人可以帮帮我吗? 谢谢。

<UserControl x:Class="LogManagerWPF.LogManager"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="clr-namespace:LogManagerWPF"
             mc:Ignorable="d" 
             d:DesignHeight="192" d:DesignWidth="400">
    <UserControl.Resources>
        <DataTemplate x:Key="DisplayImage">
            <Image Source="{Binding ImageIcon}" Width="16" Height="16"/>
        </DataTemplate>
    </UserControl.Resources>
    <ListView Margin="0" x:Name="m_lvLog" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Loaded="m_lvLog_Loaded" SizeChanged="m_lvLog_SizeChanged"  ContextMenuOpening="m_lvLog_ContextMenuOpening" SelectionChanged="m_lvLog_SelectionChanged">
        <ListView.Resources>
            <Style TargetType="{x:Type ListViewItem}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background">
                            <Setter.Value>
                                <SolidColorBrush Color="{Binding XPath=SelectedRowBackColor}"></SolidColorBrush>
                            </Setter.Value>
                        </Setter>
                        <Setter Property="BorderBrush">
                            <Setter.Value>
                                <SolidColorBrush Color="{Binding XPath=SelectedRowBackColor}"></SolidColorBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListView.Resources>
        <ListView.View>
            <GridView x:Name="m_gvLog" AllowsColumnReorder="False">
                <GridViewColumn x:Name="m_icon" Width="28" Header="" CellTemplate="{StaticResource DisplayImage}"/>
                <GridViewColumn x:Name="m_time" Width="Auto" Header="Timestamp" DisplayMemberBinding="{Binding Timestamp}">
                    <GridViewColumn.HeaderContainerStyle>
                        <Style TargetType="{x:Type GridViewColumnHeader}">
                            <Setter Property="Foreground" Value="#FF042271" />
                            <Setter Property="HorizontalContentAlignment" Value="Left" />
                            <Setter Property="Padding" Value="10,0,0,0" />
                        </Style>
                    </GridViewColumn.HeaderContainerStyle>
                </GridViewColumn>
                <GridViewColumn x:Name="m_messages" Width="100000" Header="Message" DisplayMemberBinding="{Binding Message}">
                    <GridViewColumn.HeaderContainerStyle>
                        <Style TargetType="{x:Type GridViewColumnHeader}">
                            <Setter Property="Foreground" Value="#FF042271" />
                            <Setter Property="HorizontalContentAlignment" Value="Left" />
                            <Setter Property="Padding" Value="10,0,0,0" />
                        </Style>
                    </GridViewColumn.HeaderContainerStyle>
                </GridViewColumn>
            </GridView>
        </ListView.View>
        <ListView.ContextMenu>
            <ContextMenu x:Name="m_contextMenu">
                <MenuItem x:Name="m_menuAutoScroll" Header="Autoscroll" Click="m_menuAutoScroll_Click" IsCheckable="True" />
                <MenuItem x:Name="m_menuClear" Header="Clear Log" Click="m_menuClear_Click"/>
                <MenuItem x:Name="m_menuCopy" Header="Copy to Clipboard" Click="m_menuCopy_Click"/>
                <MenuItem x:Name="m_menuVerbosity" Header="Set Verbosity">
                    <MenuItem x:Name="m_menuVerbosityLow" Header="Low" Click="m_menuVerbosityLow_Click" IsCheckable="True"/>
                    <MenuItem x:Name="m_menuVerbosityStandard" Header="Standard" Click="m_menuVerbosityStandard_Click" IsCheckable="True"/>
                    <MenuItem x:Name="m_menuVerbosityHigh" Header="High" Click="m_menuVerbosityHigh_Click" IsCheckable="True"/>
                    <MenuItem x:Name="m_menuVerbosityDebug" Header="Debug" Click="m_menuVerbosityDebug_Click" IsCheckable="True"/>
                </MenuItem>
            </ContextMenu>
        </ListView.ContextMenu>
    </ListView>
</UserControl>

这是属性:

private System.Windows.Media.Color? m_SelectedRowBackColor = System.Windows.Media.Color.FromArgb(255, 0x0A, 0x24, 0x6A);    //Colore di selezione originale

[Category("Properties")]
[Description("Selected Row Background Color")]
public System.Windows.Media.Color? SelectedRowBackColor
{
    get
    {
        return m_SelectedRowBackColor;
    }
    set
    {
        m_SelectedRowBackColor = value;
    }
}

编辑: 我注意到此解决方案有效,但仅适用于 Windows 10,无法在 Windows 7 上设置颜色:

<SolidColorBrush Color="{Binding SelectedRowBackColor, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"></SolidColorBrush>

【问题讨论】:

    标签: wpf xaml colors setter


    【解决方案1】:

    我了解 Windows 7 和 10 使用不同的方法,因此我实现了两者以在两者中实现相似的结果:

    <ListView.Resources>
        <!-- Windows 7 -->
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding SelectedRowBackColor, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ActiveBorderBrushKey}" Color="{Binding SelectedRowBackColor, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" />
        <!-- Windows 10 -->
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background">
                        <Setter.Value>
                            <SolidColorBrush Color="{Binding SelectedRowBackColor, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"></SolidColorBrush>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="BorderBrush">
                        <Setter.Value>
                            <SolidColorBrush Color="{Binding SelectedRowBackColor, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"></SolidColorBrush>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListView.Resources>
    

    【讨论】:

      猜你喜欢
      • 2013-08-07
      • 2013-10-27
      • 2023-01-24
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多