禁用WPF中包括groupBox名称的groupBox。

5
我有一个名为“groupBox”的groupBox。我想禁用整个groupBox,包括groupBox的名称。我附上了图片,希望它能清楚地说明情况。 enter image description here
<GroupBox Name="groupBox"  Grid.Column="0" Grid.Row="1" Margin="2,0,0,0" Header="GroupBox" IsEnabled="False">
            <Grid Margin="10,0,0,0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition></ColumnDefinition>

                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height=".250*"/>
                    <RowDefinition Height=".250*"/>
                </Grid.RowDefinitions>
                <RadioButton Name="RadioBtn1" VerticalAlignment="Center"  ToolTipService.ShowOnDisabled="True" Grid.ColumnSpan="3" Height="14.63">OP1</RadioButton>
                <RadioButton Name="RadioBtn2" Grid.Row="1"  VerticalAlignment="Center"  ToolTipService.ShowOnDisabled="True" Grid.ColumnSpan="3" Height="14.63">OP2</RadioButton>

            </Grid>
        </GroupBox>

我正在使用IsEnabled="False"属性。但它只作用于groupBox的内容(如果我理解错误,请纠正我!) 现在,我希望圆形区域也应该被禁用。

4个回答

7
在XAML中,一个简单的Trigger可以为您完成此操作(无需任何代码):
<GroupBox Name="groupBox" Grid.Column="0" Grid.Row="1" Margin="2,0,0,0" Header="GroupBox" IsEnabled="False">
    <GroupBox.Style>
        <Style>
            <Style.Triggers>
                <Trigger Property="Control.IsEnabled" Value="False">
                    <Setter Property="Control.Foreground" Value ="#FF6D6D6D" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </GroupBox.Style>
    <Grid Margin="10,0,0,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height=".250*"/>
            <RowDefinition Height=".250*"/>
        </Grid.RowDefinitions>
        <RadioButton Name="RadioBtn1" VerticalAlignment="Center"  ToolTipService.ShowOnDisabled="True" Grid.ColumnSpan="3" Height="14.63">OP1</RadioButton>
        <RadioButton Name="RadioBtn2" Grid.Row="1"  VerticalAlignment="Center"  ToolTipService.ShowOnDisabled="True" Grid.ColumnSpan="3" Height="14.63">OP2</RadioButton>
    </Grid>
</GroupBox>

3

仅使用触发器

<GroupBox Name="groupBox" Grid.Column="0" Grid.Row="1" Margin="2,0,0,0" Header="GroupBox" IsEnabled="False">
  <Grid Margin="10,0,0,0">
    <Grid.ColumnDefinitions>
      <ColumnDefinition>
      </ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height=".25*"/>
      <RowDefinition Height=".25*"/>
    </Grid.RowDefinitions>
    <RadioButton Name="RadioBtn1" Height="14.63" Grid.ColumnSpan="3" VerticalAlignment="Center" ToolTipService.ShowOnDisabled="True">OP1
    </RadioButton>
    <RadioButton Name="RadioBtn2" Height="14.63" Grid.ColumnSpan="3" Grid.Row="1" VerticalAlignment="Center" ToolTipService.ShowOnDisabled="True">OP2
    </RadioButton>
  </Grid>
  <GroupBox.Style>
    <Style TargetType="GroupBox">
      <Setter Property="HeaderTemplate">
        <Setter.Value>
          <DataTemplate>
            <TextBlock x:Name="header" Text="{Binding}"/>
            <DataTemplate.Triggers>
              <Trigger Property="IsEnabled" Value="False">
                <Setter TargetName="header" Property="Foreground" Value="Gray"/>
              </Trigger>
            </DataTemplate.Triggers>
          </DataTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </GroupBox.Style>
</GroupBox>

3

实际上,完全没有必要使用触发器或绑定。您可以简单地使用Label作为标题(正如@progpow所建议的那样),并且标题将像任何其他控件一样变灰:

<GroupBox>
    <GroupBox.Header>
        <Label Content="My Header Text" Padding="0" />
    </GroupBox.Header>
</GroupBox>

如果你只是将一个字符串分配给Header属性,WPF会使用一个TextBlock来可视化标题,但由于TextBlock只是一个FrameworkElement而不是像Label那样的Control,它不支持被禁用(参见标签和文本块之间的区别)。
需要为Label定义零填充(Padding="0"),因为默认填充为五,这在GroupBox的标题中看起来有点丑。

0
您可以使用以下代码更改颜色:

<GroupBox>
    <GroupBox.Header>
      <Label Foreground="Gray">My Group Header Label</Label>
    </GroupBox.Header>
</GroupBox>

您可以使用转换器更改颜色:

<Window.Resources>
            <local:BrushColorConverter x:Key="BConverter"></local:BrushColorConverter>
</Window.Resources>
...
<GroupBox>
    <GroupBox.Header>
      <Label Foreground="{Binding Path=IsEnabled, Converter={StaticResource BConverter}}">My Group Header Label</Label>
    </GroupBox.Header>
</GroupBox>

转换器代码

 public class BrushColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if ((bool)value)
            {
                {
                    return System.Windows.Media.Colors.Gray;
                }
            }
            return System.Windows.Media.Colors.Black;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接