颜色绑定不适用于Win8应用程序中的数据模板

时间:2013-03-28 19:26:39

标签: xaml binding windows-8 colors windows-runtime

我目前正在尝试为我正在使用的Win8应用程序添加某种颜色主题功能...我虽然从vm进行绑定,但一切都适用于静态UI元素。但是,我正在将一些注释(我的模型)添加到数据库中,它们也会在屏幕上显示为GridView。

但是在GridView ItemTemplate的声明的DataTemplate中,Color Binding根本不起作用......

我的模板如下所示:

<Grid Grid.Row="3" HorizontalAlignment="Left" Width="200" Height="200">
    <Grid.RowDefinitions>
        <RowDefinition Height="100"/>
        <RowDefinition Height="60"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Border Grid.Row="0"  Background="Lavender"  Opacity="50"/>
    <ScrollViewer Grid.Row="0">
        <TextBlock Grid.Row="0" Text="{Binding Content}" Foreground="DodgerBlue" />
    </ScrollViewer>
    <Border Grid.Row="1"  Background="DodgerBlue" Opacity="70"/>
    <ScrollViewer Grid.Row="1">
        <TextBlock Grid.Row="1" Text="{Binding Subject}" Foreground="LightBlue" />
    </ScrollViewer>
    <Border Grid.Row="2" Background="DodgerBlue" Opacity="70"/>
    <TextBlock Grid.Row="2" Text="{Binding Importance}" Foreground="Black"  FontSize="{StaticResource ComboBoxArrowThemeFontSize}" />
</Grid>

我尝试过的只是Foreground="DodgerBlue"而不是Foreground="{Binding ColorTheme}",但它没有效果,SolidColorBrush未从vm获得....

有没有解决方法呢?

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

颜色绑定(或更好:画笔绑定)应该可以正常工作 - 在GridView.ItemTemplate场景和其他地方。

你没有给出足够的信息来确定它在你的情况下不起作用的原因,但这里有一个我刚试过的小样本:

GridView放入您的页面:

<GridView Width="600" Height="200" ItemsSource="{Binding GridItems}"
          x:Name="GridViewName">
    <GridView.ItemTemplate>
        <DataTemplate>
            <TextBlock Width="50" Height="50" 
                       Foreground="{Binding Color}" Text="{Binding Text}" />
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

查看为您的网页绑定为DataContext的模型类:

public class ViewModel
{
    public ViewModel()
    {
        GridItems = new List<GridItem>
            {
                new GridItem {Text = "First", Color = new SolidColorBrush(Colors.White)},
                new GridItem {Text = "Second", Color = new SolidColorBrush(Colors.Yellow)},
                new GridItem {Text = "Third", Color = new SolidColorBrush(Colors.Green)},
                new GridItem {Text = "Fourth", Color = new SolidColorBrush(Colors.Red)},
            };
    }
}

GridItem上课:

public class GridItem
{
    public string Text { get; set; }
    public Brush Color { get; set; }
}

结果:

Color bound grid view

编辑:

我需要指出内部数据模板DataContext设置为绑定集合的当前项(在我的情况下为GridItems)而不是页面DataContext({{1在我的情况下)。

这意味着,通过将ViewModel设置为控件属性,您绑定到{Binding Color}而不是GridItem.Color。要使后者工作,首先需要使用您自己的答案中建议的ViewModel.Color语法访问父DataContextElementName - 这将绑定到页面上的命名元素,允许您访问其属性,在这种情况下{Binding DataContext.ColorTheme, ElementName=GridViewName}DataContext

答案 1 :(得分:0)

尽管我没有真正找到实际的解释,为什么下面的工作(我希望有更多的经验,也许可以解释我),这post,似乎对我有用。< / p>

不太确定,但是是DataContext的问题,所以我没有尝试这样的绑定:Foreground={Binding ColorTheme},而是改为:Foreground={Binding DataContext.ColorTheme, ElementName=MyGridViewName}"