|
Grid自体は単一ですから、右のグリッド・左のグリッドという表現はおかしいです。
変えたいのはGridの幅ではなく、Gridの各カラムの幅ですよね。
ですから操作対象も当然ながらColumnDefinitionのWidthということになります。
また、どこにマウスオーバーしたら幅を指定値に変更するかと考えると、
Grid全体ではどっちの幅を変えれば良いのか分からなくなりますから、
Gridの子要素として各カラムに配置されているStackPanelにマウスオーバーしたときという条件が妥当です。
トリガ発生元とスタイル適用先が違う場合、スタイルの適用先のStyleに書くのがわかりやすいです。
そうするとTriggerは使えないので、DataTriggerによるバインドで代用します。
<ColumnDefinition MinWidth=""100"">
<ColumnDefinition.Style>
<Style TargetType=""{x:Type ColumnDefinition}"">
<Setter Property=""Width"" Value=""*""/>
<Style.Triggers>
<DataTrigger Binding=""{Binding IsMouseOver, ElementName=左のStackPanelのName}"" Value=""True"">
<Setter Property=""Width"" Value=""400""/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
もう一つのColumnDefinitionも同様に。
StackPanelなどにおいては、既定では子要素が存在する場所にマウスオーバーしたときのみ、IsMouseOverがTrueになります。
つまり下の方の空白部分ではIsMouseOverがFalse扱いです。
この動作が困るのであれば、BackgroundにTransparentを指定するなどすれば子要素にかかわらずIsMouseOverがTrueを返すようになります。
それから、今回のようにアプリケーションが幅を強制的に変更するUIの場合、
GridSplitterによってユーザが幅を変更できる仕様とは食い合わせが良くないように思います。
|