前提・実現したいこと
WPF+MVVM のDataGridを使って表作成を行っております。
CanUserResizeColumns="False" の表が前提で、セルの幅と高さを入力内容によって拡張させた後、その入力内容を消したときに
行の高さは元に戻りますが、列幅を元に戻すことができません。
(MaxWidth="300" の範囲内で、一番入力幅の長いサイズに列幅をリサイズさせたい)
可能であればXAMLの記載だけで解決したいと考えていますが、良い方法はないでしょうか。
なお、実際にはもっとDataGridTemplateColumnの中身は複雑ですが、下記ソースコードはシンプルにしてあります。
よろしくお願い致します。
発生している問題・エラーメッセージ
対象の列幅が拡張したままになってしまう
該当のソースコード
MVVMフレームワークはPrismを使用しています。
XAML
1<Window x:Class="Views.test02View" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:WPF_FOR_PRISM_TEST.Views" 7 xmlns:sys="clr-namespace:System;assembly=mscorlib" 8 xmlns:prism="http://prismlibrary.com/" 9 prism:ViewModelLocator.AutoWireViewModel="True" 10 mc:Ignorable="d" 11 Title="test02View" Height="450" Width="800"> 12 13 <Grid> 14 <DataGrid HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled" Margin="0,0,0,0" 15 HeadersVisibility="Column" VerticalAlignment="Top" HorizontalAlignment="Left" 16 CanUserSortColumns="False" CanUserResizeColumns="False" CanUserAddRows="False" 17 GridLinesVisibility="All" ColumnWidth="Auto" ColumnHeaderHeight="{x:Static sys:Double.NaN}" 18 RowHeaderWidth="{x:Static sys:Double.NaN}" RowHeight="{x:Static sys:Double.NaN}" 19 BorderBrush="Black" BorderThickness="1" 20 AutoGenerateColumns="False" ItemsSource="{Binding Path=PersonList}"> 21 <DataGrid.Columns> 22 <DataGridTemplateColumn Header="名前"> 23 <DataGridTemplateColumn.CellTemplate> 24 <DataTemplate> 25 <StackPanel> 26 <TextBlock Text="{Binding Path=Name}"></TextBlock> 27 <TextBox TextWrapping="Wrap" MaxWidth="300"/> 28 </StackPanel> 29 </DataTemplate> 30 </DataGridTemplateColumn.CellTemplate> 31 </DataGridTemplateColumn> 32 <DataGridTextColumn Header="年齢" Binding="{Binding Path=Age}"></DataGridTextColumn> 33 </DataGrid.Columns> 34 </DataGrid> 35 </Grid> 36</Window>
VB
1Namespace ViewModels 2 3 Public Class test02ViewModel 4 5 Public Property PersonList As List(Of PersonData) 6 7 Public Sub New() 8 'テストデータ 9 Me.PersonList = New List(Of PersonData)(Enumerable.Range(1, 10).Select(Function(i) New PersonData With { 10 .Name = $"HOGE_{i}", .Age = 20 + 1})) 11 End Sub 12 13 End Class 14 15 Public Class PersonData 16 Public Property Name As String 17 Public Property Age As Integer 18 19 End Class 20 21End Namespace
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。