【问题标题】:Highlight item in ItemsControl突出显示 ItemsControl 中的项目
【发布时间】:2013-03-27 16:45:20
【问题描述】:

我想使用ItemsControl 渲染几个元素,并突出显示其中一个

我的视图模型:

public class ViewModel
{
    public List<Item> Items;
    public Item HighlightedItem;
}

我的 XAML:

<ItemsControl ItemsSource="{Binding Items}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <myUserControl Background="{?}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

我想通过将背景属性设置为特定的东西来突出显示该项目,我应该怎么做?

【问题讨论】:

    标签: wpf itemscontrol


    【解决方案1】:

    首先有一个转换器,它将比较两个对象的引用,比如ObjectEqualsConverter

    public class ObjectEqualsConverter : IMultiValueConverter
    {
        #region IMultiValueConverter        
    
        public object Convert(object[] values, Type targetType, object parameter,
                              CultureInfo culture)
        {
            return values[0] == values[1];
        }
    
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, 
                                    CultureInfo culture)
        {
            throw new NotImplementedException();
        } 
        #endregion
    }
    

    XAML文件中,使用转换器检查current item is same as highlighted item in ViewModel是否为真,如果转换器返回真,则使用trigger设置控制color-

       <ItemsControl ItemsSource="{Binding Items}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <myUserControl x:Name="myControl" />
                    <DataTemplate.Triggers>
                        <DataTrigger Value="True">
                            <DataTrigger.Binding>
                                <MultiBinding Converter="{StaticResource ObjectEqualsConverter}">
                                    <Binding/>
                                    <Binding Path="DataContext.HighlightedItem" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}"/>
                                </MultiBinding>
                            </DataTrigger.Binding>
                            <Setter TargetName="myControl" Property="Background" Value="Red"/>
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    

    确保在 xaml 文件中将转换器添加为 resource

    【讨论】:

    • 为我工作!谢谢。值得接受。
    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多