2

WPF ItemContainerStyle の再利用可能なテンプレートを作成しようとしています。

このテンプレートは、TabControl の項目の外観を変更します。このテンプレートは、アプリケーションのいくつかの場所で使用することを意図しています。

使用される各場所で、さまざまなパラメーターを渡すことができるようにしたいと考えています。例: アイテムの境界線のマージンを変更するには:

    <Style x:Key="TabItemStyle1" TargetType="{x:Type TabItem}">

                <Setter Property="Margin" Value="10,0"/>

                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TabItem}">
                            <Grid SnapsToDevicePixels="true">
                                <Border x:Name="Bd" Width="80"  
                                  Background="Gray" 
                                   Margin="{TemplateBinding Margin}">
                                    <ContentPresenter x:Name="Content" 
                                        ContentSource="Header" />
                                </Border>
                            </Grid>
                            <ControlTemplate.Triggers>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
...
<TabControl ItemContainerStyle="{DynamicResource TabItemStyle1}">

スタイルが使用されている場所で、次のように書きたいと思います。

ItemContainerStyle="{DynamicResource TabItemStyle1 Margin='5,0'}"

また

<TabControl Margin="78,51,167,90" ItemContainerStyle="{DynamicResource TabItemStyle1}"
            ItemContainerStyle.Margin="5,0">

動機は、このテンプレートをさまざまなマージンでさまざまな場所で使用することです。これを行う方法はありますか?

ありがとうございました

4

4 に答える 4

6

添付プロパティでそれを行うことができます。その方法を説明するブログ投稿を書きました。

http://www.thomaslevesque.com/2011/10/01/wpf-creating-parameterized-styles-with-attached-properties/

もう 1 つのオプションは、 を使用DynamicResourceし、派生スタイルでリソースを再定義することです。

于 2012-05-08T03:16:18.223 に答える
3

OK、デイブの助けを借りてこれを行う方法を見つけました。

解決策は、派生テンプレートを作成し、その中にプロパティを設定することです。このようにして、元のテンプレートを再利用できます。

<Style x:Key="TabItemStyle2" TargetType="{x:Type TabItem}" 
    BasedOn="{StaticResource TabItemStyle1}">
    <Style.Setters>
        <Setter Property="Margin" Value="40,0"></Setter>
    </Style.Setters>
</Style>

そして、TabControl の ItemContainerStyle を派生スタイルに設定します。

<TabControl ItemContainerStyle="{DynamicResource TabItemStyle2}">
于 2012-05-08T03:16:20.157 に答える
0

これを解決する方法は、表示するオブジェクト/ViewModel に Margin プロパティを追加し、テンプレートでその値に (データ) バインドすることです。

私の知る限り、パラメータ化されたスタイル/テンプレートはサポートされていません。

于 2012-05-07T12:23:03.467 に答える