答案 0 :(得分:3)
最快的方法是将标题的宽度绑定到整个扩展器的宽度。
<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>
但它不是一个精确的方法,因为你的箭头也需要一些空间,你可以看到标题比你需要的要宽一些。
您可以覆盖扩展程序标头的标准模板(HeaderTemplate
)。
<强>更新强>
我找到了一个使用the code-behind file的可能解决方案(所有信用都转到@kmatyaszek)。
添加帮助器类以查找更改宽度所需的控件。它检查父控件的整个Visual Tree,并返回我们正在寻找的类型的子项。
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;
}
}
添加处理程序以处理加载事件。它会更改HorizontalAlignment
实例的ContentPresenter
属性:
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)。它仅改变控件的视觉外观。
答案 1 :(得分:0)
<Expander Name="myexpander" IsExpanded="True" Margin="0,0,1,0">
<Expander.Header>
<Grid Width="{Binding ElementName=myexpander, Path=ActualWidth}" Height="50">
<Rectangle Fill="Red"></Rectangle>
</Grid>
</Expander.Header>
<Rectangle Fill="Red"></Rectangle>
</Expander>
</Grid>
为扩展器命名并绑定width属性