WPF ContextMenu связывает некоторое свойство с другим свойством того же элемента управления - PullRequest
1 голос
/ 14 июня 2010

У меня есть ContextMenu и ColumnHeaderStyle, определенные в разделе Window.Resource, которые я использую - для DataGrid ColumnHeader.Мой код выглядит примерно так:

<ContextMenu x:Key="cm_columnHeaderMenu"/>

<Style x:Key="DefaultColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="ContextMenu" Value="{StaticResource cm_columnHeaderMenu}" />
</Style>

<DataGrid Grid.Column="2" Grid.Row="1" x:Name="dgridFiles" IsReadOnly="True" 
 ColumnHeaderStyle="{StaticResource DefaultColumnHeaderStyle}">

Я хочу знать, могу ли я (и если ответ верен, то КАК я могу это сделать) привязать свойство видимости ContextMenu к тем же элементам управления ContextMenu.Свойство Count> 0.

Изначально на основе некоторых других элементов управления TreeView не должно быть никаких элементов в контекстном меню, но я хочу добавить динамические элементы в ContextMenu на основе выбора в TreeView.Эта часть сделана, контекст имеет эти элементы.На некоторых выборках нет никаких элементов, но все еще в сетке появляется пустое ContextMenu.Поэтому я считаю, что проще всего было бы связать свойство Visibility с Items.Count того же элемента управления.

Извините, если мой английский не достаточно хорош, я постараюсь объяснить лучше, если я не уточнил1-й раз.

Ответы [ 3 ]

2 голосов
/ 14 июня 2010

вы хотите связать через RelativeSource, особенно в режиме Self.
Я думаю, что, прочитав это или это , вы сможете достичь своей цели.

Затем вам понадобится конвертер связывания, чтобы преобразовать целочисленные значения в соответствующий тип и значения свойства Visibility. Вы найдете краткий учебник здесь .

Привет

1 голос
/ 14 июня 2010

С его помощью вы можете привязать свойство к тому же элементу управления

Visibility="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}"

Вы также должны использовать конвертер для достижения того, что вы хотите.

На всякий случай, если вам нужно это

0 голосов
/ 14 июня 2010

Попробуйте конвертер, чтобы преобразовать значение количества элементов в логическое значение. Таким образом, вы получите что-то вроде

<ContextMenu Visibility={Binding RelativeSource={RelativeSource Self},
 Converter={StaticResource ItemsToVisibilityConverter}, Path=Items.Count}} />

Если это не сработает, попробуйте сделать это с триггерами данных (конвертер все равно нужен, и конвертер работает):

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a8ad8c14-95aa-4ed4-b806-d0ae874a8d26/

...