相关疑难解决方法(0)

根据祖先类型的存在来设置样式

我有两组文本块,其中一些是在itemcontrol中,其中一些不是,我想制作一个样式(仅基于类型),如果其祖先是ItemControl,则设置文本块的背景.
我可以通过以下代码来实现,但问题是在日志(和输出窗口)上将显示数据替换错误消息,因为没有Itemcontrol作为ancestore的文本块.有没有更好的方法来执行此任务并避免此错误消息?

<Grid>
    <Grid.Resources>
        <local:HasAncestorConverter x:Key="HasAncestorConverter" />
        <Style TargetType="TextBlock">

            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, Converter={StaticResource HasAncestorConverter}}" Value="True">
                    <Setter Property="Background"
                            Value="{Binding Tag,
                            RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />

                </DataTrigger>
            </Style.Triggers>

        </Style>
    </Grid.Resources>
    <StackPanel>
        <TextBlock Text="Out of ItemControl" />
        <ItemsControl Tag="Blue" >
            <TextBlock Text="Inside of ItemControl" />
        </ItemsControl>
    </StackPanel>

</Grid>    
Run Code Online (Sandbox Code Playgroud)

转换器:

class HasAncestorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value != null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    { …
Run Code Online (Sandbox Code Playgroud)

wpf xaml findancestor

5
推荐指数
1
解决办法
2680
查看次数

标签 统计

findancestor ×1

wpf ×1

xaml ×1