简体   繁体   English

折叠GroupBox边框而不折叠内容

[英]Collapse GroupBox border without collapsing content

Is it possible to collapse the border of a GroupBox control in XAML (ie bind to a property in the VM) without also collapsing the content? 是否可以在XAML中折叠GroupBox控件的边界(即绑定到VM中的属性)而又不折叠内容?

I don't just want to remove the border, which can be achieved by setting BorderThickness to 0 and Header to an empty string. 我不只是要删除边框,这可以通过将BorderThickness设置为0并将Header设置为空字符串来实现。 I also want the GroupBox content to stretch out over where the border was. 我还希望GroupBox内容可以扩展到边框所在的位置。

<DataTemplate DataType="{x:Type config:ElementGroup}">
    <DataTemplate.Resources>
        <Style TargetType="{x:Type GroupBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=HideBorder}" Value="True">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
            <Setter Property="Foreground" Value="{StaticResource TextColor}" />
            <Setter Property="Header" Value="{Binding Path=ItemLabel}" />
            <Setter Property="Margin" Value="5,0,5,0" />
        </Style>
    </DataTemplate.Resources>
    <GroupBox>
        <ItemsControl ItemsSource="{Binding Path=ElementList}" Visibility="Visible">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Columns="{Binding Path=Columns}" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </GroupBox>
</DataTemplate>

Change your GroupBox Style to this: 将您的GroupBox样式更改为此:

    <Style TargetType="{x:Type GroupBox}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=HideBorder}" Value="True">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="GroupBox">
                            <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}"
                                      Content="{TemplateBinding Content}"  
                                      ContentStringFormat="{TemplateBinding ContentStringFormat}"
                                      Margin="{TemplateBinding Padding}"  
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
        <Setter Property="Foreground" Value="{StaticResource TextColor}" />
        <Setter Property="Header" Value="{Binding Path=ItemLabel}" />
        <Setter Property="Margin" Value="5,0,5,0" />
    </Style>

Collapsing a GroupBox , ie setting its Visibility property to Hidden or Collapse , will also collapse its Content . 折叠GroupBox ,即将其Visibility属性设置为HiddenCollapse ,也会折叠其Content

If you don't want this, you could define another ItemsControl that you display when the GroupBox gets collapsed: 如果不希望这样做,则可以定义在GroupBox折叠时显示的另一个ItemsControl

<DataTemplate DataType="{x:Type config:ElementGroup}">
    <DataTemplate.Resources>
        <Style TargetType="{x:Type GroupBox}">
            <Setter Property="Foreground" Value="{StaticResource TextColor}" />
            <Setter Property="Header" Value="{Binding Path=ItemLabel}" />
            <Setter Property="Margin" Value="5,0,5,0" />
        </Style>
    </DataTemplate.Resources>
    <Grid>
        <GroupBox x:Name="gb">
            <ItemsControl ItemsSource="{Binding Path=ElementList}" Visibility="Visible">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="{Binding Path=Columns}" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </GroupBox>
        <ItemsControl x:Name="ic" ItemsSource="{Binding Path=ElementList}" Visibility="Collapsed">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Columns="{Binding Path=Columns}" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Grid>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=HideBorder}" Value="True">
            <Setter TargetName="gb" Property="Visibility" Value="Collapsed" />
            <Setter TargetName="ic" Property="Visibility" Value="Visible" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM