在列表框项中绑定边框背景



我尝试了不同的方法来解决问题。首先,我在我的ViewModel中将主颜色绑定为字符串,颜色,画笔,并尝试将其绑定到边框 ->对我不起作用。第二个是转换器,但我无法绑定正确的字符串来激活转换器。唯一使用将主颜色作为字符串绑定到标签样式的东西,我也在同一资源中拥有。因此,现在标签中的更改有效,但在列表框中不起作用。

我的观点:

<Page.Resources>
    <ResourceDictionary Source="/Resources/ResourcePageCuttingData.xaml"></ResourceDictionary>
</Page.Resources>
<ListBox ItemsSource="{Binding Material}" SelectedItem="{Binding SelectedMat, Mode=TwoWay}" Style="{StaticResource styleMat}"   Grid.Column="5" Grid.Row="1" Margin="20,0"></ListBox>
<Label Style="{StaticResource Label_Search}"  Content="{DynamicResource so_lbl_cm}" ></Label>

我在资源词典中的列表框:

<Style x:Key="styleMat" TargetType="{x:Type ListBox}">
    <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
    <Setter Property="ItemContainerStyle" Value="{DynamicResource ResourceKey=styleLocMschItem}"></Setter>
    <Setter Property="ItemTemplate" Value="{StaticResource ResourceKey=ResultMatDataTemplate}"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBox}">
                <Border BorderBrush="#5A5A5A" BorderThickness="1" CornerRadius="4">
                    <ScrollViewer Margin="1">
                        <ItemsPresenter Margin="1"></ItemsPresenter>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<DataTemplate x:Key="ResultMatDataTemplate">
    <TextBlock Text="{Binding}"
                   FontSize="20"
               ></TextBlock>
</DataTemplate>
<Style  x:Key="styleLocMachItem" TargetType="{x:Type ListBoxItem}">
    <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Grid x:Name="grid">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="Auto"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Border x:Name="hover"
                        Background="YellowGreen"
                        Visibility="Collapsed">
                    </Border>
                    <Border x:Name="orginal"
                        Background="{Binding MainColor}">
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="highlight"
                            Property="Visibility"
                            Value="Visible">
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

主色在边框 x:名称="原始"中不起作用

我的标签:

<Style x:Key="Label_Search" TargetType="{x:Type Control}">
    <Setter Property="Background" Value="{Binding MainColor}" />
</Style>

在这里,主色工作正常

我的视图模型:

public CuttingSpeed_ViewModel()
    {
        switch (value)
        {
            case "Fast":
                MainColor = "Pink";
                    break;        
             case "Slow":
                MainColor = "Yellow";
                    break;
            default:
                   MainColor ="Red";
                 break;
        }}
    private string _MainColor;
    public string MainColor
    {
        get { return _MainColor; }
        set { _MainColor = value; OnPropertyChanged("MainColor"); }
    }
    public IEnumerable<string> Material
    {
        get { return _Material; }
        set { _Material = value; OnPropertyChanged("Material"); }
    }
    private string _SelectedMat;
    public string SelectedMat
    {
        get { return _SelectedMat; }
        set
        {..}}

我认为 xaml 中应该有一些东西不允许我获得值 MainColor。

MainColor 属性应返回一个Brush

public CuttingSpeed_ViewModel()
{
    switch (value)
    {
        case "Fast":
            MainColor = Brushes.Pink;
            break;
        case "Slow":
            MainColor = Brushes.Yellow;
            break;
        default:
            MainColor = Brushes.Red;
            break;
    }
}
private Brush _MainColor;
public Brush MainColor
{
    get { return _MainColor; }
    set { _MainColor = value; OnPropertyChanged("MainColor"); }
}

您还应该绑定到父ListBoxDataContext

<Border x:Name="orginal" Background="{Binding DataContext.MainColor, 
        RelativeSource={RelativeSource AncestorType=ListBox}}">

最新更新