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)的主要内容,如果未能解决你的问题,请参考以下文章

在后面的 C# 代码中设置网格列或网格行

WPF 在代码隐藏中设置 TextBox 属性

在 RichTextBox WPF 中设置文化/语言

Silverlight/WPF 用十六进制颜色设置椭圆

在代码中设置 WPF 图像源

如何在后面的代码中添加两个 CSS Class 来控制?