将弹出窗口的宽度绑定到另一个控件的宽度,并留有一些空白余量。该问题涉及到IT技术。

5

我希望我的弹出窗口与另一个控件具有相同的宽度,但带有一些边距。

我的要求是

 <Popup x:Name="ProfilePopup" Height="Auto"   
      Width="{Binding ActualWidth, ElementName=HeaderContainer}" -10 >

但是在WPF中,如何执行“-10”部分?或者这只能在代码中实现吗?

尝试将10作为填充添加到弹出窗口的主元素中,并将背景设置为透明。 - ywm
@ywm,弹出窗口没有填充属性。 - dovid
2个回答

5
转换器,
或者技巧:
<Popup x:Name="ProfilePopup" AllowsTransparency="True" Height="Auto" Width="{Binding ActualWidth, ElementName=HeaderContainer}" >
    <Grid Margin="5,0" />
</Popup>

3
您需要一个转换器来帮助您完成此操作:
public class SumConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (parameter != null && values != null)
        {
            double result = 0;
            foreach (object objectValue in values)
            {
                double value = 0;
                double.TryParse(objectValue.ToString(), out value);
                if (parameter.ToString() == "Add" || parameter.ToString() == "+") 
                    result += value;
                if (parameter.ToString() == "Subtract" || parameter.ToString() == "-") 
                    result -= value;
            }
            return result;
        }
        return null;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return null;
    }
}

您需要添加一个包含要减去的数量的属性(在示例中命名为BorderInnerThickness),然后您将像这样使用它:

<Popup x:Name="ProfilePopup" Height="Auto">
    <Popup.Width>
        <MultiBinding Converter="{StaticResource SumConverter}" ConverterParameter="-">
            <Binding Path="ActualWidth" ElementName="HeaderContainer" />
            <Binding Path="BorderInnerThickness" />
        </MultiBinding>
    </Popup.Width>
</Popup>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接