将我的Popup对齐到Window的底部

时间:2015-11-12 16:03:42

标签: c# wpf

我试图将我的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>

修改 断点数据: enter image description here

编辑2: 我现在已将PlacementTarget设置在我的样式中:

<Setter Property="PlacementTarget" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" />

仍然得到同样的错误!

1 个答案:

答案 0 :(得分:1)

你必须在你的转换器上返回一个double,你返回一个布尔值,导致无效的转换。

编辑:您遇到了绑定问题,您必须设置弹出窗口的“PlacementTarget”才能获得Width属性。

编辑2:试试这个:

<Window x:Class="WpfApplication7.MainWindow"
        Name="myWindow"
    ............

<Setter Property="PlacementTarget" Value="{Binding ElementName=myWindow}"/>