0

Xceed DataGridControl ( Extended WPF Toolkit Community Editionの一部) をラップするコントロールがあります。コントロールは、ボタンのリスト (コンストラクターによってインスタンス化されたフィールド) を保持できる単純なプロパティ (バッキング依存関係プロパティなし) を提供します。

public List<Button> GroupButtons
{
    get { return groupButtons; }
    set { groupButtons = value; }
}

プロパティの項目は、コントロールを使用しているビューの XAML に追加されます。

<local:CustomControl ...>

    <local:CustomControl.GroupButtons>
        <Button>foo<Button>
    </local:CustomControl.GroupButtons>

    ...
</local:CustomControl ...>

このリストのボタンを、Xceed Datagrid のいわゆる「GroupHeaderControl」内にレンダリングしたいと思います。これは、基本的に以下に示すようなグループ化行です。

ここに画像の説明を入力

これを実現するために、GroupHeaderControl の ControlTemplate を上書きしました。

<ResourceDictionary ...>
    <Style TargetType="{x:Type controls:CustomControl}">
        <Style.Resources>
            <Style TargetType="{x:Type xcdg:GroupHeaderControl}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type xcdg:GroupHeaderControl}">
                            <Border ...>
                                <StackPanel Height="{TemplateBinding Height}" Orientation="Horizontal"> 

                                    <ContentPresenter  />                        
                                    <ItemsControl ItemsSource="{Binding GroupButtons,  RelativeSource={RelativeSource AncestorType={x:Type controls:CustomControl}}}" />

                                </StackPanel>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Style.Resources>
    </Style>
    ...
</ResourceDictionary>

ここで問題が発生します。GroupHeaderControl のインスタンスごとにボタンをレンダリングする代わりに、一度だけレンダリングします。説明のために、上の画像で 2 番目のグループ ヘッダー (「Lyon」) のボタンのみが表示され、もう 1 つ (「Reims」) は表示されないと想像してください。

この問題は、GroupButtons リストの項目が XAML 定義を介して追加されるという事実に明らかに関連しています。リストの項目をハードコーディングすると、魅力的に機能します。

public List<Button> ButtonList
{
    get { return new List<Button>()
    {
        new Button() { Content = "foo" }
    }
}

この振る舞いがどこから来ているのか、私にはよくわかりません。誰かがアイデアを持っていますか?

4

0 に答える 0