代码之家  ›  专栏  ›  技术社区  ›  Matt Holmes

标签和GroupBox触发器不工作,相同的触发器在StackPanel上工作

  •  3
  • Matt Holmes  · 技术社区  · 16 年前

    我有一组XAML形式的触发器,在我的一生中,我无法弄清楚为什么一组有效,而另一组则无效,尽管它被绑定到了完全相同的变量。

    首先,真正起作用的触发器是:

    <StackPanel Orientation="Vertical" Margin="25,0,0,0">
        <StackPanel.Style>
            <Style TargetType="{x:Type StackPanel}">
                <Setter Property="IsEnabled" Value="False" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding GorOption.InternalName}" Value="Separator">
                        <Setter Property="IsEnabled" Value="True" />
                    </DataTrigger>
                </Style.Triggers>
            </Style> 
        </StackPanel.Style>
    </StackPanel>
    
    <StackPanel Orientation="Vertical" Margin="25,0,0,0">
        <StackPanel.Style>
            <Style TargetType="{x:Type StackPanel}">
                <Setter Property="IsEnabled" Value="False" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding GorOption.InternalName}" Value="BubblePoint">
                        <Setter Property="IsEnabled" Value="True" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </StackPanel.Style>
    </StackPanel>
    

    这个扳机很好用。现在,我有了一个分组框和一个标签,它们具有非常相似的触发器,根本不起作用。不起作用的触发因素:

    <GroupBox Header="Recombined Gas" Grid.Row="1" Grid.ColumnSpan="2">
        <GroupBox.Style>                
            <Style TargetType="{x:Type GroupBox}">
                <Setter Property="Header" Value="Recombined Gas" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding GorOption.InternalName}" Value="Separator">
                        <Setter Property="Header" Value="Separator Gas" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding GorOption.InternalName}" Value="BubblePoint">
                        <Setter Property="Header" Value="Dissolved Gas" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </GroupBox.Style>
    </GroupBox>
    

    标签触发不起作用:

    <Label Content="Reombined GOR" Width="90">
        <Label.Style>
            <Style TargetType="{x:Type Label}">
                <Setter Property="Content" Value="Recombined GOR" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding GorOption.InternalName}" Value="Separator">
                        <Setter Property="Content" Value="Separator GOR" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding GorOption.InternalName}" Value="BubblePoint">
                        <Setter Property="Content" Value="Dissolved GOR" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Label.Style>
    </Label>
    

    我觉得我遗漏了一些基本的东西,但现在我却不知道了。如您所见,所有触发器都绑定到相同的值,并在相同的选项上触发。是因为我有两个datatrigger块试图绑定到单个触发器块中的同一个变量吗?我无法想象这是个问题,事实上,我确信我在其他地方也会这样做。我不知道标签和分组框有什么特别之处吗?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Matt Holmes    16 年前

    无论如何,我在发帖两分钟后自己回答了这个问题。我想这是“需要在不同的环境中看到它”的问题之一。我觉得我在自言自语…

    无论如何,问题是,当您在原始XAML标记中设置内容或头等属性,然后尝试用触发器更改该属性时,由于某种原因,触发器将被忽略。我假设这是在一些我还没有看到的古老的WPF文档中解释的,但是在您弄明白之前它是非常混乱的。