我目前正在尝试为我正在使用的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获得....
有没有解决方法呢?
非常感谢提前。
答案 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; }
}
结果:
编辑:
我需要指出内部数据模板DataContext
设置为绑定集合的当前项(在我的情况下为GridItems
)而不是页面DataContext
({{1在我的情况下)。
这意味着,通过将ViewModel
设置为控件属性,您绑定到{Binding Color}
而不是GridItem.Color
。要使后者工作,首先需要使用您自己的答案中建议的ViewModel.Color
语法访问父DataContext
:ElementName
- 这将绑定到页面上的命名元素,允许您访问其属性,在这种情况下{Binding DataContext.ColorTheme, ElementName=GridViewName}
为DataContext
。
答案 1 :(得分:0)
尽管我没有真正找到实际的解释,为什么下面的工作(我希望有更多的经验,也许可以解释我),这post,似乎对我有用。< / p>
不太确定,但是是DataContext的问题,所以我没有尝试这样的绑定:Foreground={Binding ColorTheme}
,而是改为:Foreground={Binding DataContext.ColorTheme, ElementName=MyGridViewName}"
。