将多个属性绑定到单个元素属性的问题

时间:2013-06-10 13:39:43

标签: wpf multibinding

    <Button>
        <Button.Content>
            <MultiBinding StringFormat="{}{0},{1}">
                <Binding Path="Width" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}"/>
                <Binding Path="Height" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}"/>                            
            </MultiBinding>
        </Button.Content>
    </Button>

这里我尝试将窗口的宽度和高度绑定到按钮内容中,但这没有意义。

2 个答案:

答案 0 :(得分:1)

正如Adrian建议的那样,您必须将StringFormat绑定的结果分配给文本控件。试试这个:

  <Button>
    <Button.Content>
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding StringFormat="{}{0},{1}">
                    <Binding Path="ActualWidth" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type Button}}"/>
                    <Binding Path="ActualHeight" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type Button}}"/>                            
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </Button.Content>
</Button>

答案 1 :(得分:0)

你可以试试像

这样的东西
<Button>
   <Button.Content>
          <TextBlock TextAlignment="Left">  
                <Run Text="{Binding ActualWidth" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}"/>
                <Run Text=" | " />           
                <Run Text="{Binding ActualHeight" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}"/>
           </TextBlock>
    </Button.Content>
 </Button>

通过运行,您可以创建想要显示的内容。并且还可以在每个运行上显示不同的样式,例如你可以在第一次运行时创建大胆的效果,而其他可能与斜体或其他东西不同。

然后使用Window的高度宽度属性,使用 ActualHeight ActualWidth 属性,它们将为您提供实际价值。你可能有机会在高度和宽度上得到NAN,因为它们没有具体定义。