3

ListBox コントロールの GroupStyle プロパティを設定するスタイルを作成しようとしていますが、コンパイル時にエラーが発生します。

The Property Setter 'GroupStyle' cannot be set because it does not have an accessible set accessor. 

私のスタイルセッターは次のようになります:

        <Setter Property="ListBox.GroupStyle">
            <Setter.Value>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Name}" />
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                </GroupStyle>
            </Setter.Value>
        </Setter>

また、このプロパティのセッターがない場合、そもそも XAML でプロパティ セッター構文​​を使用してインラインで定義するにはどうすればよいでしょうか? (WPFはまだ新しい)

4

4 に答える 4

3

答えを見つけたところです。これは、XAML コンパイラが要素タグ間のコンテンツを処理する方法が原因です。これは、覚えているコンテンツにマップされたプロパティの型に基づいています。

プロパティが ContentControl の場合、2 つのタグ間で定義した要素がその Content プロパティに割り当てられますが、要素が IList (GroupStyle とは) のインスタンスである場合、.NET は実際に .Add() を呼び出します。カバーの下

この場合、GroupStyle は実際には ObservableCollection であり、したがって IList であるため、実際には GroupStyle オブジェクトに割り当てているのではなく、コレクションに追加しています。

つまり、要素タグ間のコンテンツ (コントロールの ContentProperty 属性を介してマップされる) によって表されるプロパティの型は、XAML コンパイラがそれを解釈する方法 (直接割り当てまたは .Add() の呼び出し) に影響します。

于 2012-08-19T01:42:38.513 に答える
1
//set you datatemplate as a resource
<DataTemplate x:Key="categoryTemplate">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>


//set header template binding to staticresource
<ListBox Name="lst"> 
   <ListBox.GroupStyle>
      <GroupStyle HeaderTemplate="{StaticResource categoryTemplate}" />
    </ListBox.GroupStyle>
</ListBox>
于 2012-08-18T22:24:57.767 に答える
0

よく理解するために、コードに groupstyle を追加できます (これが XAML の機能です)。

GroupStyle g = new GroupStyle();
ListBox ls = new ListBox();
ls.GroupStyle.Add(g);

ただし、GroupStyle を設定することはできません

GroupStyle g = new GroupStyle();
ListBox ls = new ListBox();
ls.GroupStyle=g;//error because GroupStyle has only a getter
于 2012-08-19T01:13:17.360 に答える