不幸的是,这与默认扩展器模板的问题有关,该模板将标题的水平对齐设置为向左而不是拉伸。让它工作的最好方法是创建一个正确设置它的新模板。以下是更多信息的链接:
http://silverlight.net/forums/p/57142/145801.aspx#145801
它适用于 Silverlight,但也适用于 wpf。另一种方法是将上面的停靠面板宽度绑定到包含扩展器的元素的实际宽度。这不是一个很好的解决方案,但它有效。您需要为宽度创建一个值转换器。这是一些代码:
[ValueConversion(typeof(double), typeof(double))]
public class OffsetDoubleConverter : IValueConverter
{
#region IValueConverter Members
public double Offset { get; set; }
public bool KeepPositive { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double number = (double)value + Offset;
if ((KeepPositive) && (number < 0.0))
{
number = 0.0;
}
return number;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double number = (double)value - Offset;
if ((KeepPositive) && (number < 0.0))
{
number = 0.0;
}
return number;
}
#endregion
}
在你的 xaml 中:
<!-- create a ref to your namespace -->
xmlns:loc="clr-namespace:YourNamespace"
...
<Window.Resources>
<loc:OffsetDoubleConverter x:Key="ExpanderConverter" Offset="-208.0" KeepPositive="True"/>
</Window.Resources>
...
<DockPanel Width="{Binding ElementName=ADifferentElement, Path=ActualWidth,
Converter={StaticResource ExpanderConverter}}">
...
同样,这不是最好的解决方案,但它应该可以工作。需要注意的一点是,如果将偏移值设置得太小并将其绑定到扩展器的父级,则可以让 Visual Studio 挂起,因为父级的实际宽度将基于扩展器的宽度。
如果这个实现不是很清楚,请告诉我。同样,我真的建议只为扩展器使用自定义模板。您可以获取默认模板,只需稍加修改即可使其正常工作。如果你愿意,我也可以发布。