- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的 DataGrid 创建一个自定义 header ,以便能够以一种强大的方式进行过滤。一切都像我想要的那样工作,除了 UserControl 不随列拉伸(stretch)这一事实。我已将 UserControl 的背景涂成红色,以便能够在图像中更清楚地看到它。
我一直在这里和其他地方寻找答案,但我发现的所有内容都表明我不应该在 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 模型中,因为我想重用它,所以我看不到模板如何帮助我。
谢谢!
/埃里克
最佳答案
如果您将控件的 HorizontalAlignment
属性设置为 Stretch
,您就告诉该控件尝试占用尽可能多的可用水平空间。这里的问题是承载您的控件的容器(在本例中是一个 DataGridColumnHeader
控件)试图将其内容保持在左侧并占用尽可能少的水平空间 - 这是因为它是 HorizontalContentAlignment
属性默认设置为 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/
我遇到了一个问题,我有一个 DataGridColumnHeader,它正在接收带有下划线的文本作为内容,并且第一个下划线是隐藏的,除非你按 alt(“data_grid_thing”显示为“data
DataGridColumnHeader 发生了什么?当 DataGrid 移入 PresentationFramework 时,它看起来像是被删除了。 最佳答案 DataGridColumnHead
我在 View.cs 中有这段代码 var contextMenu = this.dataGridFacade.GiveContextMenuForDataGrid(this.DataGridAllJ
我在 MVVM 中有一个 DataGrid,它的 ItemsSource 绑定(bind)到一个自定义模型。 此模型中的属性的命名方式与数据库中的对应属性相同。例如: public string St
我想为 WPF DataGrid Column Header 编写样式。我的网格如下 `
我正在尝试自定义 DataGrid 的列标题以显示子列标题,如下面的屏幕截图所示: 我已经为 2 个子列制作了样式,如下面的 XAML 所示:
考虑以下 ViewModel: public class MyViewModel { public ObservableCollection foos { get; set; } } [Pro
如何在 DataGridColumHeader 中使用 DataTriggers?使用下面的这段代码,它不起作用。有人知道我该如何解决这个问题吗?
我有 TextBox 驻留在样式资源字典中的 DataGridColumnHeader 中,TextBox 用作过滤器,所以我需要触发 TextChanged 事件并在 View Model 中处理它
我需要在 DataGridColumnHeader 上使用 Command 对数据进行排序。标准 DataGrid 排序功能对我来说还不够,因为 DataGrid 中并未显示所有数据。我的虚拟机中甚至
我正在尝试为我的 DataGrid 创建一个自定义 header ,以便能够以一种强大的方式进行过滤。一切都像我想要的那样工作,除了 UserControl 不随列拉伸(stretch)这一事实。我已
样式化 DataGrid,我想通过将触发器应用于 ControlTemplate 或 Style 来区分其最后一列标题。例如:
我遇到了一个场景,我必须动态创建数据网格列并且必须在 C# 代码中创建列。我在每个生成的列的单独代码区域中都有一个复选框。该复选框确定特定列是隐藏还是可见。该复选框绑定(bind)到 GameAttr
我是一名优秀的程序员,十分优秀!