0

我记得前段时间,在 MSDN 上看到一个示例,说明如何根据该项目中对象的类类型更改 LitViewItem 的样式。

谁能指出我这个例子的方向或类似的例子?我正在转换文件管理器,我很想使用这种方法。

谢谢,汤姆 P。

编辑:好的,我认为我没有正确描述我的问题。让我试试代码:

public class IOItem
{
}

public class FileItem : IOItem
{
}

public class DirectoryItem : IOItem
{
}

public class NetworkItem : IOItem
{
}

现在,鉴于上述类,我可以创建一个基于最终对象的类类型更改的样式吗?例如:

<Style TargetType="{x:Type FileItem}">
    <Setter Property="Background" Value="Red" />
</Style>
<Style TargetType="{x:Type DirectoryItem}">
    <Setter Property="Background" Value="Green" />
</Style>

这可能吗?

4

3 回答 3

4

您需要创建一个StyleSelector并将其分配给该ItemContainerStyleSelector属性。在选择器中,只需根据项目的类型选择一种样式。

class MyStyleSelector : StyleSelector
{
    public override Style SelectStyle(object item, DependencyObject container)
    {
        if (item is FileItem)
            return Application.Current.Resources["FileItemStyle"];
        if (item is DirectoryItem)
            return Application.Current.Resources["DirectoryItemStyle"];
        return null;
    }
}
于 2012-10-09T19:09:47.360 回答
0

我认为您可以使用模板选择器。

数据模板选择器类

另一种选择是接口,接口中的一个属性将反映调用。
然后您可以在 XAML 中使用模板。

于 2012-10-09T15:30:09.497 回答
0

您始终可以将类类型的样式放在您正在使用的 List 控件的资源集合中,它们将覆盖您设置的任何全局样式。

<ListView ItemsSource="{Binding Elements}">
        <ListView.Resources>

          <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TextBlock}">
                            <Rectangle Fill="Green" Width="100" Height="100"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

           <Style TargetType="{x:Type Button}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Rectangle Fill="Red" Width="100" Height="100"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>


        </ListView.Resources>
    </ListView>

如果您希望多个列表控件包含这些特定的类样式,则为列表控件创建一种样式并在其资源中包含特定于类型的样式。

  <Window.Resources>

        <Style x:Key="myListStyle" TargetType="{x:Type ListView}">
            <Style.Resources>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Rectangle Fill="Red" Width="100" Height="100"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Style.Resources>
        </Style>

    </Window.Resources>
    <ListView ItemsSource="{Binding Elements}" Style="{StaticResource myListStyle}" />
于 2012-10-09T15:41:41.270 回答