0

少し前に、MSDN で、そのアイテムのオブジェクトのクラス タイプに基づいて LitViewItem の Style を変更する方法の例を見たのを覚えています。

この例またはそのような例の方向性を教えてくれる人はいますか? ファイルマネージャーを変換していますが、このアプローチを使用したいと思っています。

ありがとう、トム P.

編集: OK、問題を正しく説明していないと思います。コードを試してみましょう:

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

使用しているリストコントロールのリソースコレクション内にクラスタイプのスタイルをいつでも配置できます。これらのスタイルは、設定したグローバルスタイルを上書きします。

<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 に答える
0

テンプレートセレクターを使用できると思います。

DataTemplateSelector クラス

別のオプションはインターフェイスであり、インターフェイスのプロパティの 1 つが呼び出しを反映します。
その後、XAML でテンプレートを使用できます。

于 2012-10-09T15:30:09.497 に答える