我试图将我的Popup对齐到我窗口的底部中心,我怎么会收到这个错误:
其他信息:指定的演员表无效。
这是由我的转换器double windowWidth = (double)values[0];
引起的,但实际上,ActualWidth应该是双倍!不太确定这里出了什么问题。
我目前正在MessageBox中显示数据,只是为了测试它,并确保值看起来正确。
转换器
namespace Test_Project.Converters
{
public class NotificationOffsets : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double windowWidth = (double)values[0];
double notificationWidth = (double)values[1];
MessageBox.Show("Notification Width: " + notificationWidth.ToString() + " Window Width: " + windowWidth.ToString());
return false;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
XAML - 转换器绑定
<Style TargetType="Popup" x:Key="PopupNotification">
<Setter Property="IsOpen" Value="True" />
<Setter Property="HorizontalOffset">
<Setter.Value>
<MultiBinding Converter="{StaticResource NotificationOffsets}">
<Binding RelativeSource="{RelativeSource Self}" Path="PlacementTarget.ActualWidth" />
<Binding RelativeSource="{RelativeSource Self}" Path="ActualWidth" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
编辑2:
我现在已将PlacementTarget
设置在我的样式中:
<Setter Property="PlacementTarget" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" />
仍然得到同样的错误!
答案 0 :(得分:1)
你必须在你的转换器上返回一个double,你返回一个布尔值,导致无效的转换。
编辑:您遇到了绑定问题,您必须设置弹出窗口的“PlacementTarget”才能获得Width属性。
编辑2:试试这个:
<Window x:Class="WpfApplication7.MainWindow"
Name="myWindow"
............
<Setter Property="PlacementTarget" Value="{Binding ElementName=myWindow}"/>