gpt4 book ai didi

c# - DataGridColumnHeader 中的 UserControl 不拉伸(stretch)

转载 作者:行者123 更新时间:2023-11-30 23:33:57 24 4
gpt4 key购买 nike

我正在尝试为我的 DataGrid 创建一个自定义 header ,以便能够以一种强大的方式进行过滤。一切都像我想要的那样工作,除了 UserControl 不随列拉伸(stretch)这一事实。我已将 UserControl 的背景涂成红色,以便能够在图像中更清楚地看到它。

enter image description here

我一直在这里和其他地方寻找答案,但我发现的所有内容都表明我不应该在 UserControl 中明确设置宽度,并且我已经检查过了。

我试过在标题中添加一个网格,然后将用户控件放在标题中,但这没有帮助。

下面是我如何将 UserControl 添加到其中一个标题:

                <DataGridTextColumn Binding="{Binding Path=Description}">
<DataGridTextColumn.Header>
<views:FilterControl Header="Description" FilterChangedEvent="Filtering_Changed" PropertyPath="Description" />
</DataGridTextColumn.Header>
</DataGridTextColumn>

这是完整的 UserControl xaml:

 <UserControl x:Class="White.Db.ContentOrderDb.Views.FilterControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:White.Db.ContentOrderDb.Views"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="120" HorizontalAlignment="Stretch">
<UserControl.Resources>
<Style TargetType="FrameworkElement" x:Key="IsEnabledStyle">
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="OpacityMask" Value="Black"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=FilterActive}" Value="True" >
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid Background="White">
<TextBox Style="{StaticResource IsEnabledStyle}" TextChanged="SearchPatternText_Changed" Height="23" Margin="3,50,3,0" TextWrapping="Wrap" Text="{Binding Path=SearchPattern,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top">
<TextBox.BorderBrush>
<LinearGradientBrush EndPoint="0,20" MappingMode="Absolute" StartPoint="0,0">
<GradientStop Color="#FFABADB3" Offset="0.05"/>
<GradientStop Color="#FFE2E3EA" Offset="0.07"/>
<GradientStop Color="#FFB4B4B4" Offset="1"/>
</LinearGradientBrush>
</TextBox.BorderBrush>
</TextBox>
<Label Content="{Binding Path=Header}" VerticalAlignment="Top" Height="30" Background="gray" Foreground="White" BorderBrush="#FFB6B6B6" BorderThickness="1"/>
<CheckBox Unchecked="FilterDeActivated" Checked="FilterActivated" IsChecked="{Binding Path=FilterActive}" Content="Active" HorizontalAlignment="Left" Margin="3,32,0,0" VerticalAlignment="Top" BorderBrush="#FFB4B4B4"/>
<ComboBox SelectionChanged="ComboBox_SelectionChanged" Style="{StaticResource IsEnabledStyle}" Text="{Binding Path=ComboBoxText}" IsReadOnly="True" IsEditable="True" ItemsSource="{Binding Path=ComboBoxItems}" Margin="3,75,3,0" VerticalAlignment="Top">
<ComboBox.BorderBrush>
<LinearGradientBrush EndPoint="0,20" MappingMode="Absolute" StartPoint="0,0">
<GradientStop Color="#FFABADB3" Offset="0.05"/>
<GradientStop Color="#FFE2E3EA" Offset="0.07"/>
<GradientStop Color="#FFB4B4B4" Offset="1"/>
</LinearGradientBrush>
</ComboBox.BorderBrush>
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Path=Content}" IsChecked="{Binding Path=IsChecked}" Checked="CheckBox_CheckedChanged" Unchecked="CheckBox_CheckedChanged" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>

有什么想法吗?我还没有看到人们将 UserControls 添加到标题的任何示例,这是错误的方法吗?我所看到的只是正在使用的模板和样式。我已经将所有用于过滤的逻辑添加到用户控件及其 View 模型中,因为我想重用它,所以我看不到模板如何帮助我。

谢谢!

/埃里克

最佳答案

如果您将控件的 Horizo​​ntalAlignment 属性设置为 Stretch,您就告诉该控件尝试占用尽可能多的可用水平空间。这里的问题是承载您的控件的容器(在本例中是一个 DataGridColumnHeader 控件)试图将其内容保持在左侧并占用尽可能少的水平空间 - 这是因为它是 Horizo​​ntalContentAlignment 属性默认设置为 Left。因此,为了让您的控件自由拉伸(stretch),您还需要将该属性设置为 Stretch。最简单的方法是利用 DataGridColumn.HeaderStyle属性:

<DataGridTextColumn Binding="{Binding Path=Description}">
<DataGridTextColumn.Header>
<views:FilterControl Header="Description" FilterChangedEvent="Filtering_Changed" PropertyPath="Description" />
</DataGridTextColumn.Header>
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>

您可能还需要尝试使用 DataGridColumnHeader 的其他属性来获得所需的结果 - 我注意到默认情况下它的内容被填充,并且没有设置 Padding 也没有 Margin 属性有帮助,但是将 Background 属性设置为 Transparent(或任何其他与此相关的属性)可以摆脱神秘的填充。

关于c# - DataGridColumnHeader 中的 UserControl 不拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com