gpt4 book ai didi

c# - wpf - Expander 的标题适合内容宽度?

转载 作者:行者123 更新时间:2023-12-05 09:21:06 25 4
gpt4 key购买 nike

有什么方法可以使 ExpanderHeader 适合 WPF 中可调整大小的窗口中的最大宽度?看来无论我做什么我都无法将内容扩展到最大宽度。它在 ExpanderContent 部分工作。

enter image description here

<Grid Background="LightGray">

<Expander IsExpanded="True">
<Expander.Header>
<Grid Width="100" Height="50">
<Rectangle Fill="Red"></Rectangle>
</Grid>
</Expander.Header>

<Rectangle Fill="Red"></Rectangle>

</Expander>

</Grid>

最佳答案

最快的方法是将标题的宽度绑定(bind)到整个扩展器的宽度。

<Expander IsExpanded="True">
<Expander.Header>
<Grid Width="{Binding RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type Expander}},
Path=ActualWidth}"
Height="50">
<Rectangle Fill="Red"></Rectangle>
</Grid>
</Expander.Header>
<Rectangle Fill="Red"></Rectangle>
</Expander>

但这不是一个精确的方法,因为箭头也占用了一些空间,并且您可以看到标题比您需要的要宽一些。 Changed width for expander's header

您可以覆盖扩展器 header 的标准模板 (HeaderTemplate)。

更新

我使用 the code-behind file 找到了可能的解决方案(所有学分归于@kmatyaszek)。

添加一个辅助类来找到我们需要改变宽度的控件。它检查父控件的整个可视化树并返回我们正在寻找的类型的子项。

public static class VTHelper
{
public static T FindChild<T>(DependencyObject parent) where T : DependencyObject
{
if (parent == null) return null;

T childElement = null;
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
T childType = child as T;
if (childType == null)
{
childElement = FindChild<T>(child);
if (childElement != null)
break;
}
else
{
childElement = (T)child;
break;
}
}
return childElement;
}
}

添加处理程序来处理加载事件。它更改了 ContentPresenter 实例的 Horizo​​ntalAlignment 属性:

private void expander_Loaded(object sender, RoutedEventArgs e)
{
var tmp = VTHelper.FindChild<ContentPresenter>(sender as Expander);
if (tmp != null)
{
tmp.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
}
}

将此处理程序附加到扩展器:

<Expander IsExpanded="True" Loaded="expander_Loaded">

此方法使用代码隐藏,但不适用于任何数据(或 ViewModel)。它仅更改控件的视觉外观。

关于c# - wpf - Expander 的标题适合内容宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34354858/

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