2012-03-28 9 views
0

私は、同じリソースディクショナリ内のスタイル内からusercontrolのリソースディクショナリ内で定義されたデータテンプレートにアクセスする必要があるシナリオを実行しました。 xamlコードは次のようになります。WPFの同じリソースディクショナリ内からリソースにアクセス

<UserControl.Resources> 
    <ResourceDictionary> 
<DataTemplate x:Key="headertemp"> 
      <WrapPanel> 
       <TextBlock Text="{Binding ProcedureName}"></TextBlock> 
       <Label Content="{Binding Status}"></Label> 
      </WrapPanel> 
     </DataTemplate> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="Background" Value="Transparent"/> 
      <Setter Property="Margin" Value="0,2,0,0"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <Expander HeaderTemplate="{Binding Source={StaticResource headertemp}}"> 
         <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Detail}" HeadersVisibility="Column"> 
          <DataGrid.Columns> 
          <DataGridTextColumn Header="Timestamp" Binding="{Binding TimeStamp}"></DataGridTextColumn> 
          <DataGridTextColumn Header="Name" Binding="{Binding ProcedureName}"></DataGridTextColumn> 
          <DataGridTextColumn Header="Details" Binding="{Binding Description}"></DataGridTextColumn> 
          </DataGrid.Columns> 
         </DataGrid> 
        </Expander> 
       </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ResourceDictionary> 

これは機能しません。私は、データ型とスタイルの両方が同じ 'レベル'で定義されているため、問題があると考えました。しかし、たとえグリッドのような低レベルのソースコードにスタイルを移しても、それは機能しません。 私はWPFスタイルにあまり慣れていません。現在のソリューションとは異なるソリューションも歓迎します。ありがとう。

+0

である必要がありますあなたは「それが機能しない」とはどういう意味ですか?私は、サンプルプロジェクトでxamlスニペットをコピーし、正常に動作し、私は固定された文字列でバインディングを置き換えています。おそらく拘束力はあなたの問題でしょうか? – SvenG

+0

あなたは正しいです。バインドが問題です。私はグーグル・グーグルで、リソース・ディクショナリ内からのバインディングはそれほど簡単ではないことを発見しました。もし誰かがそれを手伝ってくれたら嬉しいです。私はコードをバインドしたくありません。 – Tulip

答えて

3

HeaderTemplateプロパティには、バインディングではなくDataTemplateが必要です。したがって、次の

<Expander HeaderTemplate="{Binding Source={StaticResource headertemp}}"> 

<Expander HeaderTemplate="{StaticResource headertemp}"> 
関連する問題