0

好的,我有一个 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 回答