1

現在、作業中の Win8 アプリにある種のカラー テーマ機能を追加しようとしています... vm からバインディングを作成しましたが、すべてが静的 UI 要素に対して正常に機能します。しかし、私はいくつかのメモ (私のモデル) を DB に追加しています。それらは画面にも 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>

私が試したのは単にtoの代わりでしForeground="DodgerBlue"Foreground="{Binding ColorTheme}"が、効果SolidColorBrushがなく、vmから取得されませんでした....

これに対する回避策はありますか?

よろしくお願いします。

4

2 に答える 2

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、バインドされたコレクション (私の場合) の現在のアイテムに設定されていることを指摘する必要があります。GridItemsDataContextViewModel

これは、{Binding Color}バインドしているコントロール プロパティに設定することにより、 にバインドしGridItem.Colorないことを意味しViewModel.Colorます。後者を機能させるには、最初に、独自の回答で既に提案した構文をDataContext使用して親にアクセスする必要があります。-これは、ページ上の名前付き要素にバインドし、そのプロパティにアクセスできるようにします。ElementName{Binding DataContext.ColorTheme, ElementName=GridViewName}DataContextViewModel

于 2013-03-29T05:55:25.180 に答える
0

以下が機能する理由についての実際の説明を実際には見つけられませんでしたが(そして、誰かがもっと経験を積んで、おそらく私を説明してくれることを願っています)、この投稿は私にとってはうまくいったようです。

よくわかりませんが、DataContext の問題だったので、この : のようなバインドを試みる代わりに、この :Foreground={Binding ColorTheme}に変更しましたForeground={Binding DataContext.ColorTheme, ElementName=MyGridViewName}"

于 2013-03-29T10:06:01.163 に答える