WPF 在后面的代码中设置 DataTemplate 网格大小(ResourceDictionary)
Posted
技术标签:
【中文标题】WPF 在后面的代码中设置 DataTemplate 网格大小(ResourceDictionary)【英文标题】:WPF Set DataTemplate Grid size in code behind (ResourceDictionary) 【发布时间】:2021-08-15 16:08:41 【问题描述】:我有包含 Dialog 模板的 ResourceDictionary。它有自己的DataType="x:Type viewModels:DialogViewModel"
。我想在初始化时设置这个对话框“窗口”的大小。如果我将例如 Height 属性添加到DialogViewModel
,我知道该怎么做。但是,这不是指定高度的正确位置。如何在后面的代码中执行它然后绑定到该属性?我想我已经尝试了所有可能的解决方案。
基本上我需要在SplitDialog.xaml.cs
中指定高度,比如说Height=500
,然后将其添加到<Grid Margin="20,20,20,10" Tag="Category dialog" MinHeight="450" Height="???" x:Name="MainGrid">
,但是如何?
我尝试添加到SplitDialog.xaml.cs
(返回高度为空):
Grid gGrid = (Grid)this.FindName("MainGrid");
gGrid.Height = 600;
SplitDialog.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Controls.Styles.Dialog.SplitDialog"
xmlns:viewModels="clr-namespace:ViewModels.Category;assembly=ViewModels">
<DataTemplate DataType="x:Type viewModels:DialogViewModel">
<DataTemplate.Resources>
<ResourceDictionary>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</ResourceDictionary>
</DataTemplate.Resources>
<Grid Margin="20,20,20,10" Tag="Category dialog" MinHeight="450" x:Name="MainGrid">
</Grid>
</DataTemplate>
</ResourceDictionary>
SplitDialog.xaml.cs:
public partial class SplitDialog : ResourceDictionary
public SplitDialog()
【问题讨论】:
您想什么时候设置Height
?要么在模板中设置,要么等到模板应用于元素并将其设置在元素上。
@mm8 我想在初始化时设置它。这是因为需要在初始化时设置高度,并在模板本身中设置 MinHeight 并允许用户调整大小 => 如有必要,将其变大。
【参考方案1】:
在Grid的Loaded事件中提供这个逻辑,例如:
<Grid Loaded="Grid_Loaded">...
然后在代码隐藏中:
private void Grid_Loaded(object sender, RoutedEventArgs e)
Grid grid = sender as Grid;
if (grid != null)
grid.Height = 600;
没有?
【讨论】:
以上是关于WPF 在后面的代码中设置 DataTemplate 网格大小(ResourceDictionary)的主要内容,如果未能解决你的问题,请参考以下文章