WPF资源样式未首次显示

WPF资源样式未首次显示,wpf,xaml,Wpf,Xaml,当我将我的集合绑定到以下窗口和usercontrol时,这些样式不起作用 当我按下窗口上的一个按钮时,这些样式就会显示出来 是什么阻止我的风格在初始绑定时开火 <Grid> <ItemsControl Name="LbItems" ItemsSource="{Binding MyData}"> <ItemsControl.Resources> <DataTemplate DataType="{x:Type

当我将我的集合绑定到以下窗口和usercontrol时,这些样式不起作用

当我按下窗口上的一个按钮时,这些样式就会显示出来

是什么阻止我的风格在初始绑定时开火

<Grid>
    <ItemsControl Name="LbItems" ItemsSource="{Binding MyData}">
        <ItemsControl.Resources>
            <DataTemplate DataType="{x:Type viewModel:SomeViewModel}">
                <control:SomeView Margin="5" />
            </DataTemplate>
            <DataTemplate DataType="{x:Type viewModel:AnotherViewModel}">
                <control:AnotherView Margin="5" />
            </DataTemplate>
        </ItemsControl.Resources>
    </ItemsControl>
</Grid>

我有一个用户控件,如下所示:

<UserControl.Resources>
    <Style TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource={x:Static 
                RelativeSource.Self}, Path=DataContext.Selected}" Value="False">
                <Setter Property="Foreground">
                    <Setter.Value>
                        Red
                    </Setter.Value>
                </Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding RelativeSource={x:Static 
                RelativeSource.Self}, Path=DataContext.Selected}" Value="True">
                <Setter Property="Foreground">
                    <Setter.Value>
                        DarkSeaGreen
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Button Command="{Binding SelectCommand}"  Content="+" HorizontalAlignment=
        "Left" VerticalAlignment="Top" Width="25" Grid.Column="0"/>
    <TextBlock HorizontalAlignment="Left" Margin="5" TextWrapping="Wrap" Text=
        "{Binding Endorsement.Name}" VerticalAlignment="Top" Grid.Column="1" />
    <Button Command="{Binding DeselectCommand}" Content="-" HorizontalAlignment=
        "Right" VerticalAlignment="Top" Width="25" Grid.Column="2"/>
</Grid>

红色
深海洋绿

您不应该在DataTrigger绑定中执行此操作:

Binding="{Binding RelativeSource={x:Static 
            RelativeSource.Self}, Path=DataContext.Selected}"
默认情况下,绑定引用DataContext,因此等效的更简单形式如下:

Binding="{Binding Path=Selected}"
我不认为这能解决你的问题(但如果能解决,那就太好了)。一种解决方法是,如果两个触发器均未触发,则在前景样式中定义默认值:

<UserControl.Resources>
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="Foreground" Value="Red" />
        <Style.Triggers>
        ...

...
这假设在加载时取消选择所有项目。希望这有帮助

干杯,
Eric

当页面加载和设置“选定”时是两个不同的时间;因此,当页面加载且未发生任何事情时,selected为null。预测空情况,例如添加样式

<DataTrigger Binding="{Binding RelativeSource={x:Static 
                RelativeSource.Self}, Path=DataContext.Selected}" Value="{x:Null}">
  ...

...

您的
DataTrigger
正在
DataContext
中查找属性。。。你在哪里设置这个
DataContext
?usercontrol在网格中显示正确的数据,所以我认为数据上下文应该在用户控件上设置,否则什么也不会显示。不是吗?是的,我是n00b。你能告诉我们你是怎么设置的吗?谢谢。这是一个复制/粘贴错误。就像我之前说的,我是n00b。所以我现在更像是一个搜寻者而不是一个程序员:)@higing.ape至于绑定,一个更好的方法可能是在代码隐藏中设置页面的数据上下文。如果感兴趣,请查看我的博客文章(我在网站上没有广告)。