1
  <ListBox>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Textblock Text={Binding Path=Content} Foreground={Binding Path=TextColor}/>
            </DataTemplate>
        <ListBox.ItemTemplate>
    </ListBox>

嗨,我正在 WP8 中开发一个图书阅读器应用程序。我有一个段落列表,我使用 ListBox 显示。正如您在我的代码中看到的那样,每个段落内容都绑定到一个文本块。在 Paragraph 类中,我定义了一个名为 TextColor 的字段来将文本块的前景色绑定到它。现在,每次用户更改颜色时,我都必须遍历故事中的所有段落并更改 TextColor 的值。有没有办法将 ListboxItem 的 2 个不同属性(即前景和文本)分别绑定到不同的源>所以我只需要更改前景一次。感谢

4

2 回答 2

0

有多种方法可以为绑定指定不同的源。例如,您可以使用ElementName指向您的列表框并检索其数据上下文:

<ListBox x:Name="MyList" ItemsSource="{Binding Path=Paragraphs}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Textblock Text="{Binding Path=Content}" Foreground="{Binding Path=DataContext.TextColor, ElementName=MyList}"/>
        </DataTemplate>
    <ListBox.ItemTemplate>
</ListBox>

Foreground但是在您的情况下,仅在父列表上设置属性可能更容易。它将自动应用于所有子控件:

<ListBox x:Name="MyList" ItemsSource="{Binding Path=Paragraphs}" Foreground="{Binding Path=TextColor}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Textblock Text="{Binding Path=Content}" />
        </DataTemplate>
    <ListBox.ItemTemplate>
</ListBox>
于 2013-06-30T15:02:14.293 回答
0

KooKiz 解决方案非常好。但是,如果您不想包含任何属性来管理前景色或任何视觉属性,那么您可以简单地将其设置为静态资源并绑定到该资源,而不是您可以独立于模型修改它们。

例如,您可以定义一个ForegroundResouces类并添加应用程序需要的不同类型的前景。

在 App.xaml 中

<Application.Resources>
  <local:ForegroundResouces xmlns:local="clr-namespace:YOUR-NAMESPACE" x:Key="ForegroundResouces" />
</Application.Resources>

然后定义你的类

public class ForegroundResouces {
  public static Brush TitleForeground { get; set; }
  public static Brush ContentForeground { get; set; }
  // ...
}

然后定义你的绑定

<ListBox>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Textblock 
        Text={Binding Path=Content} 
        Foreground={Binding Path=ContentForeground, Source={StaticResource ForegroundResouces} />
    </DataTemplate>
  <ListBox.ItemTemplate>
</ListBox>

然后你可以简单地通过修改你的静态属性来改变前景

ForegroundResources.ContentForeground = new SolidBrush(Colors.Red);

您可以制作不同的主题集,但如果您要管理多个视觉属性,此解决方案可能才值得。

于 2013-06-30T15:34:40.643 回答