我遇到了一个已经解决的问题。
WPF binding HorizontalAlignment to TextAlignment
我有一个ListBoxItem,其HorizontalAlignment属性由Converter更改,根据Window的宽度。我在这个ListBoxItem中有一个TextBlock,其TextAlignment属性绑定到ListBoxItem的HorizontalAlignment属性。
首先,我使用了一个简单的绑定,它没有工作(ListBoxIten的HorizontalAlignment已更改,但TextAlignment未更新)。这是代码:
<ListBox>
<ListBoxItem>
<TextBlock TextWrapping="Wrap" Text="Some text"
TextAlignment="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}, Path=HorizontalAlignment}"/>
</ListBoxItem>
</ListBox>
之后,我使用了MultiBinding而不是Binding,传递了AcualWidth属性,转换器实际上没有使用它。现在,当ListBoxItem的HorizontalAlignment发生更改时,TextAlignment会更新。我使用了以下代码:
<TextBlock TextWrapping="Wrap" Text="Some text">
<TextBlock.TextAlignment>
<MultiBinding Converter="{StaticResource HorizontalToTextAlignmentConverter}">
<Binding Path="ActualWidth" RelativeSource="{RelativeSource Self}"/>
<Binding Path="HorizontalAlignment" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}"/>
</MultiBinding>
</TextBlock.TextAlignment>
</TextBlock>
转换器本身是相同的,它只有一个未使用的变量(Window的ActualWidth)。所以,我的问题是:为什么TextAlignment仅使用MultiBinding更新?