You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行时在指定窗体打开时修改Uid为Row6的RowDefinition的最小最大高度

在运行时修改复用Grid中指定RowDefinition的最小/最大高度

没问题,我来给你捋捋怎么实现这个需求——你要在特定窗体调用那个复用的Grid时,动态修改Uid为Row6的RowDefinition的最小和最大高度,对吧?这里有两种靠谱的方法,你可以根据能不能修改原XAML来选择:

方法一:给RowDefinition加x:Name(最直接)

如果你能修改原Grid的XAML代码,给目标RowDefinition加个x:Name是最简单的方式:

<Grid x:Uid="SplittingGrid" x:Name="SplittingGrid" Grid.Row="2" Background="Gray" Height="auto">
    <Grid.RowDefinitions>
        <RowDefinition x:Uid="Row5" Height="200*" />
        <!-- 新增x:Name属性,方便后台直接引用 -->
        <RowDefinition x:Uid="Row6" x:Name="Row6Definition" Height="120*" MaxHeight="250" MinHeight="150" />
    </Grid.RowDefinitions>
</Grid>

然后在特定窗体的后台代码(比如窗体的Loaded事件里),直接找到这个命名的RowDefinition修改属性就行:

private void TargetWindow_Loaded(object sender, RoutedEventArgs e)
{
    // 确保RowDefinition已经加载完成
    if (Row6Definition != null)
    {
        Row6Definition.MinHeight = 180; // 设置你需要的最小高度
        Row6Definition.MaxHeight = 300; // 设置你需要的最大高度
    }
}

方法二:通过x:Uid查找(不能改原XAML时用)

如果原Grid的XAML不能修改(比如是封装好的复用控件),那可以通过x:Uid来遍历查找目标RowDefinition:

using System.Linq; // 需要引用Linq命名空间

private void TargetWindow_Loaded(object sender, RoutedEventArgs e)
{
    // 先找到复用的SplittingGrid
    var splittingGrid = FindName("SplittingGrid") as Grid;
    if (splittingGrid == null) return;

    // 遍历RowDefinitions,找到Uid为Row6的项
    var row6Def = splittingGrid.RowDefinitions
        .FirstOrDefault(row => System.Windows.Markup.Localizer.GetUid(row) == "Row6");
    
    if (row6Def != null)
    {
        row6Def.MinHeight = 180;
        row6Def.MaxHeight = 300;
    }
}

这里要注意:

  • 必须引用System.Linq才能用FirstOrDefault方法
  • 要用System.Windows.Markup.Localizer.GetUid()来获取元素的Uid,因为x:Uid是附加属性,不能直接通过元素的Uid字段访问

关键注意点

不管用哪种方法,都要确保这段修改代码是在Grid已经被加载到当前窗体之后执行——比如放在窗体的Loaded事件处理里,或者在你调用/加载这个Grid的逻辑之后,不然会出现找不到元素的情况。

内容的提问来源于stack exchange,提问作者BugFixerDev-Migz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:37:33