【发布时间】:2016-04-27 16:14:20
【问题描述】:
我创建了一个带有 dataTemplate 的 ItemControl,其中包含一个将根据 ItemsSource 着色的矩形。提供给我的应用程序的日期是一个不包含井号 (#) 的彩色十六进制代码。只是一个 6 个字符的字符串。为了让颜色正确显示,我需要格式化 6 个字符的字符串,并在其前面加上 #。 exp #A31F34
这是 XAML
<DataTemplate x:Key="ColorSequenceSwatchPreviews">
<Rectangle Name="ColorSwatch" Height="20" Width="120" RadiusX="3" RadiusY="3" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,3,0,3">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Fill">
<Setter.Value>
<MultiBinding>
<MultiBinding.StringFormat><![CDATA[#{0}]]></MultiBinding.StringFormat>
<Binding Path="InnerXml" Mode="OneWay" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</Rectangle.Style>
</Rectangle>
我正在使用 MultiBinding.StringFormat 将字符串正确格式化为 Hexcode,但我很难理解为什么矩形的填充没有着色。
如果我使用 TextBox 进行 MultiBinding,则可以让矩形着色,然后将矩形的填充属性绑定到文本框的 Text 属性。但是,我更喜欢直接从矩形的填充属性绑定,就像在我的第一个示例中一样,因为它更干净。
<DataTemplate x:Key="ColorSequenceSwatchPreviews">
<StackPanel Orientation="Horizontal" Margin="0,3,0,3" VerticalAlignment="Center" HorizontalAlignment="Left">
<TextBox x:Name="Hexcode" Visibility="Collapsed">
<TextBox.Text>
<MultiBinding>
<MultiBinding.StringFormat><![CDATA[#{0}]]></MultiBinding.StringFormat>
<Binding Path="InnerXml" Mode="OneWay" />
</MultiBinding>
</TextBox.Text>
</TextBox>
<Rectangle Name="ColorSwatch" Height="20" Width="120" RadiusX="3" RadiusY="3" VerticalAlignment="Center" HorizontalAlignment="Left">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Fill" Value="{Binding ElementName=Hexcode,Path=,Mode=OneWay}" />
</Style>
</Rectangle.Style>
</Rectangle>
</StackPanel>
有没有办法让第一个示例工作,还是我坚持使用第二个示例中的代码?
【问题讨论】:
标签: xaml multibinding