WPF:DockPanel上一个可见的子填充?

德里克·莫勒(Derrick Moeller)

我正在寻找的行为基本上是DockPanel的行为,我希望最后一个孩子来填充可用空间。问题是我希望它成为最后一个可见的孩子。就我而言,我想同时显示两个视图。

到目前为止,我已经尝试将两种不同的样式应用于网格,但两种样式似乎都不起作用。我也尝试过使用在理论上似乎可行的转换器(我可以使用double.NaN返回“ Auto”),但是我不确定如何从代码中返回宽度“ *”。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*">
            <ColumnDefinition.Style>
                <Style TargetType="{x:Type ColumnDefinition}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Visibility, ElementName=ccSomeItems}" Value="Collapsed">
                            <Setter Property="Width" Value="0" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ColumnDefinition.Style>
        </ColumnDefinition>
        <ColumnDefinition Width="*">
            <ColumnDefinition.Style>
                <Style TargetType="{x:Type ColumnDefinition}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding SomeOtherItems.AllOtherItems.Count, Converter={StaticResource IntegerToVisibilityConverter}}" Value="Collapsed">
                            <Setter Property="Width" Value="0" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ColumnDefinition.Style>
        </ColumnDefinition>
    </Grid.ColumnDefinitions>
    <ContentControl x:Name="ccSomeItems" Content="{Binding SomeItems}" Margin="4" Visibility="{Binding SomeItems.AllItems.Count, Converter={StaticResource IntegerToVisibilityConverter}}" />
    <ContentControl Grid.Column="1" Content="{Binding SomeOtherItems}" Margin="4" Visibility="{Binding SomeOtherItems.AllOtherItems.Count, Converter={StaticResource IntegerToVisibilityConverter}}" />
</Grid>
德里克·莫勒(Derrick Moeller)

我能够处理Rachel的评论,并使用转换器找到解决方案。

XAML:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{Binding Visibility, ElementName=SomeItems, Converter={StaticResource VisibilityToGridLengthConverter}}" />
        <ColumnDefinition Width="{Binding Visibility, ElementName=SomeOtherItems, Converter={StaticResource VisibilityToGridLengthConverter}}" />
    </Grid.ColumnDefinitions>
    <ContentControl x:Name="SomeItems" Content="{Binding SomeItems}" Visibility="{Binding SubPackages.AllPackages.Count, Converter={StaticResource IntegerToVisibilityConverter}}" />
    <ContentControl x:Name="SomeOtherItems" Grid.Column="1" Content="{Binding SomeOtherItems}" Visibility="{Binding Elements.AllElements.Count, Converter={StaticResource IntegerToVisibilityConverter}}" />
</Grid>

和转换器:

[ValueConversion(typeof(Visibility), typeof(GridLength))]
public class VisibilityToGridLengthConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (Visibility)value == Visibility.Collapsed ? new GridLength(0) : new GridLength(1, GridUnitType.Star);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

IQKeyboardManagerSwift:上一个/下一个按钮不可见

如何使下一个/上一个段落在div中可见?

C# WPF - Dockpanel 的子级折叠而不调整其他可见子级的大小

引用上一个可见行中的单元格

如何查找上一个可见行的行号

上一个不可见元素上的 Vue v-radio

如何在Flutter中使用PageView使上一个和下一个项目可见?

如何使用“上一个/下一个”按钮滑动“猫头鹰轮播”中的所有可见项目,而不是一个

填充公式向下到最后一个可见单元格

在将数据添加到垂直滚动的文档中时,如何使上一个零件可见?

WPF根据另一个元素设置DataGridTextColumn可见性

WPF的第一个StackPanel目录可见,再没有

如何设置WPF中另一个类的元素的可见性?

使用CSS或JS标记溢出的div中的最后一个可见子级

来自另一个页面的会话变量在子域上不可见

CSS-悬停可见另一个子菜单

jQuery仅在最后一个子元素可见时才添加CSS类

BorderLayout-添加另一个组件后,子组件仍然可见

swiperjs-如何使上一个和下一个滑块保持可见,但不使当前滑块居中

我不知道为什么左栏有一个可见的顶部填充?

向 div 添加填充,如果(垂直)滚动条在另一个 div 中可见

SVG <circle> 填充覆盖上一个圆

用上一个非空行的副本填充空行

(修改JSFiddle)如何使下拉框仅可见,具体取决于您在上一个下拉框中选择的内容?

使一个项目可见而所有其他项目不可见

在一个JPanel绘制网格是不可见的完全

如何知道一个元素是否对用户可见?

变量在另一个块中也可见

up:等待一个元素可见?