私のプログラムのユーザーは、ListView/GridViewで表示する列を自分で決定することができます。そのためWPF:ColumnHeaderを列に追加する方法
は、私は1つ(この列の幅を保持するタイプDouble
のLastWidth
と呼ばれ、他方(カラムとオフのトグル視認性)タイプBoolean
のIsColumnVisible
と呼ばれ、GridViewColumn
ための2つの添付プロパティを作成したときにそれを最後に見えた)。
プロパティIsColumnVisible
はOnChangedCallback
です。
プロパティがFalse
に設定されている場合、私は私の財産LastWidth
の列の現在の幅を節約し、0
に現在の幅を設定するプロパティがTrue
に設定されている場合、私は私から列の最後の幅を取得しますプロパティLastWidth
に設定し、現在の幅をその値に設定します。
これまでのところ動作しますが、欠陥があると、マウスで非表示の列のサイズを変更して再び表示できるようになりました。したがって、3つの列があり、中間の列を非表示にすると、最初の列のサイズをマウスで変更すると、2番目の列が再び表示されます。
私はIsEnabled
の非表示列のヘッダーの状態をFalse
に設定したいと思っていましたが、それが問題の始まりです。
のは、私の列は、この(隠された列1および4見える、コラム2及び3)のようにXAMLで定義されているとしましょう:私の財産IsColumnVisible
のデフォルト値は、この私のOnChangedCallback
True
あるので
<GridView AllowsColumnReorder="True">
<GridViewColumn Header="Column 1" Width="50" DisplayMemberBinding="{Binding Column1}" local:GridViewColumnConfig.IsColumnVisible="True" />
<GridViewColumn Header="Column 2" Width="50" DisplayMemberBinding="{Binding Column2}" local:GridViewColumnConfig.IsColumnVisible="False" />
<GridViewColumn Header="Column 3" Width="50" DisplayMemberBinding="{Binding Column3}" local:GridViewColumnConfig.IsColumnVisible="False">
<GridViewColumn.Header>
<GridViewColumnHeader Content="Column 4" />
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn Header="Column 4" Width="50" DisplayMemberBinding="{Binding Column4}" local:GridViewColumnConfig.IsColumnVisible="True" />
</GridView>
プロパティは、IがOnChangedCallback
タイプGridViewColumn
のオブジェクトを持っていると私は私のGridViewColumn
のGridViewColumnHeader
を決定する必要が列ヘッダーのIsEnabled
状態を設定できるように列2および3
に対して実行します。
GridViewColumn
は、Object
タイプのプロパティHeader
を持っています。列2の場合、このプロパティにはString
"列2"が含まれ、列3の場合にはこのプロパティはNothing
です。
私のGridViewColumn
のヘッダをGridViewColumnHeader
オブジェクトとして取得する方法はありますか?コラム2の場合
私自身は、それがHeader
プロパティの値にContent
だ設定し、このオブジェクトにHeader
プロパティを設定しGridViewColumnHeader
オブジェクトを作成することができます。
しかし、もし私がそうしなければ、これらの変更をしないでください。
カラム3の場合、すでにXAMLで定義しているので、GridViewColumnHeader
オブジェクトがあるはずですが、見つけられません。
すでにビジュアルツリーを歩いてみましたが、GridViewColumn
はVisual
またはVisual3D
ではないため、これは不可能です。
アイデア?ありがとうございました。
ので、あります実際には暗黙的なGridViewColumnHeader(列2のような)ヘッダーの属性構文を使用すると? – Nostromo
問題は、属性構文を使用するときにHeaderプロパティがIsColumnVisibleプロパティの前に*設定されているためです。そのため、ヘッダープロパティがコールバックにNothingを返すのはこのためです。 – mm8
私は、このアタッチされた振る舞いを使用するたびに要素構文を使用することを忘れないでください。自分自身を覚えておくよりも記憶したいと思っています。どうやって調達するかについての提案はありますか?私のプロパティがヘッダーの前に設定されている場合は例外ですか? – Nostromo