2011-06-22 23 views
1

ListViewObservableCollection<MenuTrayItem>で埋められています。私のリソースでは、そのクラスのためにDataTemplateを定義しました。私はListViewItemコントロールでトリガーをキャッチし、私のDataTemplateBorderコントロールのバックグラウンドを変更したいと思います。私は取得していますWPF DataTrigger変更コントロール

エラーが

/Views/MenuTrayItemView.xaml GlobalResources.xaml

<DataTemplate x:Key="MenuTrayItem_Template" DataType="{x:Type model:MenuTrayItem}"> 
    <view:MenuTrayItemView Margin="5,0,5,0" /> 

    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListViewItem}},Path=IsSelected}" Value="True"> 
      <!-- i am trying to change the background on the control "Container" 
       in the <view:MenuTrayitemView /> --> 
      <Setter TargetName="Container" Property="Border.Background" Value="Red" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

{"Child with Name 'Container' not found in VisualTree."}

です

<UserControl x:Class="CellestusInvoicing.Views.MenuTrayItemView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d"> <UserControl.Resources> <ResourceDictionary Source="/Resources/GlobalResources.xaml" /> </UserControl.Resources> <Border x:Name="Container" Width="64" Height="48" CornerRadius="5" Background="{StaticResource Gradient_Grey}" Cursor="Hand" MouseEnter="Container_MouseEnter" MouseLeave="Container_MouseLeave"> <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Image Margin="0,3,0,0" Width="60" Height="30" Source="{Binding Image, FallbackValue='/Images/Icons/MenuTray_Home.png'}" /> <TextBlock Margin="3,0,0,0" Text="{Binding Title, FallbackValue='title'}" FontSize="10" Foreground="White" /> </StackPanel> </Border> </UserControl> 

答えて

3

境界線はセッターの範囲外です。

From MSDN

あなたはセッターのコレクション(このセッターはの一部であるコレクション)が適用されるの範囲内の任意の要素の名前にこのプロパティを設定することができます。これは、通常、このセッターを含むテンプレート内の名前付き要素です。

トリガーを境界線のスタイル自体に配置することができます。内部からListViewItemを探します。これにより、UserControlがListViewItemsで使用されないように結合されるので、UserControl自体にinterfaceプロパティを作成することもできます。これは、DataTriggerによって使用されますが、これは再びBorder上にありますが、プロパティは外部から設定されます。

+0

私はそれが範囲外であると理解しましたが、私はそれに到達する方法を知らなかった。あなたは私の体のあなたがDataContextを考慮に入れてUserControlを変更することを意味するものの例を教えていただけますか?私は考えていません... –

+1

実際には、あなたはすでにDataContextを使用して、DataTriggerのバインディングはそれを必要としません、私はちょうどあなたの境界線をListViewItemへのRelativeSourceバインディングを介して外に見えるようにするか、内部的に使用され、(UserControl自体が有効なので)外部から設定されるusercontrolの新しいプロパティを作成します。 –

+0

オハイオイなぜ私はそれを考えなかったのですか? :Pありがとう! –

関連する問題