gpt4 book ai didi

c# - 如何操作 gridview 的单个组标题

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:47 27 4
gpt4 key购买 nike

以下场景:

我使用 GridView 来呈现分组数据。

我在 headertemplate 中添加了一个 TextBlock
应包含该组中的项目数。 (例如)

(编辑:在我的场景中,我总是显示 6 个项目,并希望在我的 HeaderTemplate 的 TextBlock 子项中显示溢出)

如何从代码访问各个组标题以操作此 TextBlock?

这是一个结果示例:

Example Output

这里是我的 GroupHeaderTemplate 的简化示例:

<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock x:name="overflow"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>

所以我想为每个生成的组单独访问和操作“溢出”项目!

最佳答案

这就是您真正想要的。

首先编辑GroupStyle HeaderTemplate

<GridView.GroupStyle>
<GroupStyle HidesIfEmpty="True">
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Width="500" Margin="5,0,0,5">
<TextBlock HorizontalAlignment="Left">
<Run Text="{Binding Name}" />
<Run FontFamily="Segoe Ui Symbol" Text="" />
</TextBlock>
<TextBlock HorizontalAlignment="Right">
<Run Text="{Binding Children.Count, FallbackValue=0}" />
<Run Text="Items" />
</TextBlock>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid />
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</GridView.GroupStyle>

please note I am using a VaraibleSizedWrapGrid

接下来,处理 GridView 的 Loaded 事件

class SubtractConverter : IValueConverter
{
public double Amount { get; set; }
public object Convert(object v, Type t, object p, string l)
{ return System.Convert.ToDouble(v) - Amount; }
public object ConvertBack(object v, Type t, object p, string l)
{ throw new NotImplementedException(); }
}

private void GridView_OnLayoutUpdated(object sender, RoutedEventArgs e)
{
var grid = sender as GridView;
var converter = new SubtractConverter { Amount = 5 * 2 /* padding x2 */ };
foreach (GroupItem group in (grid.ItemsPanelRoot as Panel).Children)
{
var result = VisualTreeHelper.GetChild(group, 0);
while (!(result is Grid))
result = VisualTreeHelper.GetChild(result, 0);
var items = (result as Panel).Children.OfType<ItemsControl>()
.First().ItemsPanelRoot;
var binding = new Binding
{
Path = new PropertyPath("ActualWidth"),
Mode = BindingMode.OneWay,
Converter = converter,
Source = items,
};
var header = (result as Panel).Children.OfType<ContentControl>()
.First().ContentTemplateRoot as FrameworkElement;
header.SetBinding(FrameworkElement.WidthProperty, binding);
}
}

而且,很快!现在您的页眉的大小完全适合组中项目的宽度。

要记住的事情(作为设计师):

  1. 您的分组项目可能会像一列一样窄。使用 Header TextBoxes 中的 TextTrimming 解决此问题。
  2. 您分组的项目可能比显示器宽,# items 可能在屏幕外。在包含的 grid 上使用 MinWidth 解决这个问题。

祝你好运!

关于c# - 如何操作 gridview 的单个组标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499128/

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