#c# #wpf #grid
#c# #wpf #сетка
Вопрос:
Я искал в stackoverflow, и для DataGrid есть свойство FrozenColumnCount, но Grid control не имеет этого свойства.
У нас есть сетка с 2 столбцами. Теперь нам нужно заморозить последний столбец в сетке и сделать так, чтобы он всегда отображался в клиентской области пользовательского элемента управления. в противном случае, если данные (например, текст) в первом столбце слишком длинные, клиент должен использовать мышь, чтобы перетащить полосу прокрутки горизонта, чтобы отобразить 2-й столбец.
Мы хотим, чтобы клиент всегда мог видеть данные во 2-м столбце, поэтому мне интересно, можем ли мы заморозить указанный столбец.
Обновление 1: я вставляю свой код для элемента управления древовидным представлением.
<HierarchicalDataTemplate x:Uid="HierarchicalDataTemplate_1" x:Key="MyPaletteMyTestTreeCell"
ItemsSource="{Binding Converter={StaticResource MyTestDataAccessor}}"
ItemTemplateSelector="{StaticResource MyTestDataAccessor}">
<ContentControl x:Uid="ContentControl_1" MouseDoubleClick="Item_MouseDoubleClick" ContextMenu="{StaticResource TreeListViewItemContextMenu}" MouseRightButtonDown="MRClick" Focusable="False">
<Grid x:Uid="Grid_2" Background="Transparent">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Uid="ColumnDefinition_3" />
<ColumnDefinition x:Uid="ColumnDefinition_2" Width="Auto" />
</Grid.ColumnDefinitions>
<Grid x:Uid="Grid_3" Grid.Column="0">
<StackPanel x:Uid="StackPanel_3" HorizontalAlignment="Left" Orientation="Horizontal">
<pc:ThemedImage x:Uid="Image_4"
LightSource="{Binding CategoryId, Converter={StaticResource LightMyTestIconConverter}, Mode=OneWay}"
DarkSource="{Binding CategoryId, Converter={StaticResource DarkMyTestIconConverter}, Mode=OneWay}"
Width="16" Height="16"
Margin="0,1,0,1"
VerticalAlignment="Center"/>
<TextBlock x:Uid="TextBlock_13" Text="{Binding Name}" VerticalAlignment="Center" Margin="3,0,0,1" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap"/>
</StackPanel>
</Grid>
<Grid x:Uid="Grid_4" Grid.Column="1">
<CheckBox x:Uid="CheckBox_3" HorizontalAlignment="Right" Click="CheckBox_Click" Grid.Column="1" Style="{StaticResource MyPaletteMyTestVisibilityStyle}" ToolTip="On/Off" Focusable="False">
<CheckBox.IsChecked>
<Binding x:Uid="Binding_1" Converter="{StaticResource MyTestDataAccessor}" Path="Visibility" Mode="OneWay">
<Binding.ConverterParameter>
<FrameworkElement x:Uid="FrameworkElement_1" DataContext="{TemplateBinding DataContext}" Tag="Visibility"/>
</Binding.ConverterParameter>
</Binding>
</CheckBox.IsChecked>
<CheckBox.IsEnabled>
<Binding x:Uid="Binding_2" Converter="{StaticResource MyTestDataAccessor}" Path="Visibility" Mode="OneWay">
<Binding.ConverterParameter>
<FrameworkElement x:Uid="FrameworkElement_2" DataContext="{TemplateBinding DataContext}" Tag="Enabled"/>
</Binding.ConverterParameter>
</Binding>
</CheckBox.IsEnabled>
</CheckBox>
</Grid>
</Grid>
</ContentControl>
</HierarchicalDataTemplate>
РЕШЕНИЕ:
Я нашел причину. Я указал для него полосу прокрутки горизонта. Итак, когда я удалил его и использовал приведенный выше код, он может работать так, как ожидалось.
большое спасибо.
Ответ №1:
Очевидно, вы неправильно об этом думаете. Вам просто нужно поместить столбец, который вы хотите «заморозить», во внешний столбец Grid
. Попробуйте что-нибудь такое:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<!-- Your other controls -->
</Grid>
<Grid Grid.Column="1" Name="FrozenColumn">
<!-- Your frozen controls -->
</Grid>
</Grid>
Комментарии:
1. Я обновил свой поток и добавил код xaml, который я использовал. Я изменил то, что вы предлагаете, но все равно получил тот же результат. Полоса прокрутки горизонта все еще существует, и текст длинного слова не был многоточием. Есть комментарии? спасибо.
2. Вам просто нужно научиться использовать
Grid
my friend . ПараметрWidth="Auto"
следует использовать только для содержимого, подобного вашему правому столбцу, для которого не требуется так много места. Для среднего столбца с текстом должно быть установлено значениеWidth="*"
.