Задать вопрос

Как перевести XAML в код?

Доброго времени суток, запнулся на следующей проблеме. Есть xaml который работает как надо, а именно по клику на заголовок колонки выводит показывает меню со всеми колонками

<UserControl.Resources>
 <ContextMenu x:Key="ColumnMenu" 
                     ItemsSource="{Binding Columns}" 
                     DataContext="{Binding DataContext, 
                                            RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}">
            <ContextMenu.ItemContainerStyle>
                <Style TargetType="{x:Type MenuItem}">
                    <Setter Property="IsChecked" Value="{Binding Visibility,Converter={StaticResource Vt}}"></Setter>
                    <Setter Property="Command" Value="{Binding DataContext.ChangeVisibleColumnCommand, 
                                RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" ></Setter>
                    <Setter Property="CommandParameter" Value="{Binding}"></Setter>
                </Style>
            </ContextMenu.ItemContainerStyle>
            <ContextMenu.ItemTemplate>
                <DataTemplate DataType="MenuItem">
                    <MenuItem Header="{Binding Header}"></MenuItem>
                </DataTemplate>
            </ContextMenu.ItemTemplate>
        </ContextMenu>
</UserControl.Resources>
<DataGrid Context={StaticResouce ContextMenuRow}>
   <DataGrid.Resources>
           <Style TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="ContextMenu" Value="{StaticResource ColumnMenu}"/>
            </Style>
    </DataGrid.Resources>
</DataGrid>


перел этот код C#
var columMenu = new ContextMenu();
columMenu.SetBinding(System.Windows.Controls.ContextMenu.ItemsSourceProperty, new Binding("Columns"));
var menu = new ContextMenu();
menu.SetBinding(System.Windows.Controls.ContextMenu.ItemsSourceProperty, new Binding("ContextMenuItems"));
var stl = new System.Windows.Style();
stl.Setters.Add(new Setter(DataGridColumnHeader.ContextMenuProperty, columMenu));            
dg.Style = stl;
dg.ContextMenu = menu;


Реагирует только menu, но если убрать dg.ContextMenu = menu; то над всем DataGrid появляется columMenu

Как быть?
  • Вопрос задан
  • 406 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Как говорится,"С помощью простых приспособлений можно из буханки хлеба сделать троллейбус. Но зачем?" Зачем делать UI через C#?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы