0

OK、次のような XElement があります。

<authentication mode="Forms">
  <forms loginUrl="login.aspx" name=".LOGIN" protection="All" timeout="4800" path="/" />
</authentication>

次に、XAML で次のような ContentControl をセットアップします。

<ContentControl Content="{Binding Data}">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding Path=Attribute[mode].Value}" Value="Forms">
                        <Setter Property="ContentTemplate" Value="{StaticResource FormsTemplate}"/>                            
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

Data は、XElement を含むパブリック プロパティです。私のテンプレートは次のようになります。

<DataTemplate x:Key="FormsTemplate">
        <StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Login URL"/>
                <TextBox Text="{Binding Path=Element[forms].Attribute[loginUrl].Value}"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Name"/>
                <TextBox Text="{Binding Path=Attribute[name].Value}"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Protection"/>
                <TextBox Text="{Binding Path=Attribute[protection].Value}"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Timeout"/>
                <TextBox Text="{Binding Path=Attribute[timeout].Value}"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Path"/>
                <TextBox Text="{Binding Path=Attribute[path].Value}"/>
            </StackPanel>
        </StackPanel>
    </DataTemplate>
    <DataTemplate DataType="passport">
        <StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Redirect URL"/>
                <TextBox Text="{Binding Path=Attribute[redirectUrl].Value}"/>
            </StackPanel>                
        </StackPanel>
    </DataTemplate>

なぜこれが機能しないのですか?これを行うと、画面に何も表示されません。

4

1 に答える 1

0

代わりにスタイルトリガーを使用して解決しました。以下は、これが機能するために使用しなければならなかったものです。

<ContentControl.Style>
            <Style TargetType="{x:Type ContentControl}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Data.Attribute[mode].Value}" Value="Forms">
                        <Setter Property="ContentTemplate" Value="{StaticResource FormsTemplate}"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=Data.Attribute[mode].Value}" Value="Passport">
                        <Setter Property="ContentTemplate" Value="{StaticResource PassportTemplate}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ContentControl.Style>
于 2012-07-13T20:41:57.550 に答える