У меня есть ScrollViewer
где отображается содержание страницы. Внутри у меня есть DataGrid, но когда я помещаю DataGrid внутри ScrollViewer, ширина столбцов теряется. Поэтому я прочитал здесь h ttp://stackoverflow.com/questions/17875765/wpf-scrollviewer-around-datagrid-affects-column-width , что мне нужно привязать ширину родительского элемента к моему DataGrid, и все в порядке, но в чем проблема. При увеличении ширины окна увеличивается ширина DataGrid, но при уменьшении ширины окна ширина DataGrid не изменяется. То, что я хотел бы иметь, это когда ширина ширины изменения DataGrid также изменяется.WPF: изменение ширины datagrid внутри ScrollViewer
Это пример XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<!--Page Content-->
<Grid x:Name="grid">
<DataGrid Width="{Binding ElementName=grid, Path=ActualWidth}">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="Header 1" />
<DataGridTextColumn Width="*" Header="Header 2" />
<DataGridTextColumn Width="*" Header="Header 3" />
<DataGridTextColumn Width="*" Header="Header 4" />
<DataGridTextColumn Width="*" Header="Header 5" />
<DataGridTextColumn Width="*" Header="Header 6" />
<DataGridTextColumn Width="*" Header="Header 7" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</ScrollViewer>
</Window>
Редакция: Теперь мой MainWindow выглядит следующим образом:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:my="clr-namespace:WpfApplication1"
x:Name="window1">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<my:MyGrid />
</ScrollViewer>
</Window>
и мой контроль:
<UserControl x:Class="WpfApplication1.MyGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<DataGrid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualWidth}">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="Header 1" />
<DataGridTextColumn Width="*" Header="Header 2" />
<DataGridTextColumn Width="*" Header="Header 3" />
<DataGridTextColumn Width="*" Header="Header 4" />
<DataGridTextColumn Width="*" Header="Header 5" />
<DataGridTextColumn Width="*" Header="Header 6" />
<DataGridTextColumn Width="*" Header="Header 7" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
Хорошо работает, как я хочу, но что делать, если у меня DataGrid отображается в UserControl? Width = "{Binding ElementName = ShellView, Path = ActualWidth}" в UserControl для меня не работает. – mardok
Рад, что он работает. Не стесняйтесь проголосовать за полезные приветствия или отметить один как ответ. Вам нужно будет показать мне, как вы используете этот UserControl. Как выглядит xaml этого usercontrol? –
Это немного сложно, потому что я использую Caliburn.Micro, который я изучаю;). У меня есть , которые отображают мой UserControl, и я пытаюсь получить window1 или ShellView в моем случае. –
mardok