自定义控件中禁用按钮

时间:2011-05-25 05:44:07

标签: wpf xaml wpf-controls

我在wpf中做了一个自定义控件但是我遇到了构成项控件一部分的按钮的问题(附图中每个项元素中的x是按钮)基本上是按钮已禁用,但我没有禁用它!

如果我只是将其中一个内部项(MultiSelectionItem)单独放入网格中,那么该按钮工作正常,因此它必须与我在ItemsControl元素中的使用有关。外部控件的模板(MultiSelectionBox

图片:

img

<Style TargetType="{x:Type local:MultipleSelectionBox}">
 <Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="{x:Type local:MultipleSelectionBox}">
      <Border Background="{TemplateBinding Background}"
              BorderBrush="{TemplateBinding BorderBrush}"
              BorderThickness="{TemplateBinding BorderThickness}">
        <ItemsControl ItemsSource="{Binding multipleSelectionItems}">
          <ItemsControl.Template>
            <ControlTemplate>
              <WrapPanel IsItemsHost="True"/>
            </ControlTemplate>
          </ItemsControl.Template>
        </ItemsControl>
      </Border>
    </ControlTemplate>
  </Setter.Value>
 </Setter>
</Style>

 <Style TargetType="{x:Type local:MultipleSelectionItem}">
<Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="{x:Type local:MultipleSelectionItem}">
      <Border BorderBrush="#FFC0CBD9" BorderThickness="1" Margin="0,0,2,2" CornerRadius="0">
        <Border.Style>
          <Style TargetType="Border">
            <Style.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background">
                  <Setter.Value>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                      <GradientStop Color="#FFDFE9F5" Offset="0" />
                      <GradientStop Color="#FFEEF3FC" Offset="1" />
                    </LinearGradientBrush>
                  </Setter.Value>
                </Setter>
              </Trigger>
            </Style.Triggers>
          </Style>
        </Border.Style>
        <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20" />
            <ColumnDefinition Width="*" />
          </Grid.ColumnDefinitions>
          <Button Command="{x:Static local:MultipleSelectionItemCommands.RemoveCommand}" IsEnabled="True">
            <Button.Template>
              <ControlTemplate>
                <Image Source="/CustomFormResearch;component/Images/x_no_hover.jpg" Margin="2,0,0,0" Height="11" Width="11">
                  <Image.Style>
                    <Style TargetType="{x:Type Image}">
                      <Setter Property="Source" Value="/CustomFormResearch;component/Images/x_no_hover.jpg" />
                      <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                          <Setter Property="Source" Value="/CustomFormResearch;component/Images/x_with_hover.jpg" />
                        </Trigger>
                      </Style.Triggers>
                    </Style>
                  </Image.Style>
                </Image>
              </ControlTemplate>
            </Button.Template>
          </Button>
          <TextBlock Text="{Binding DisplayData}" VerticalAlignment="Stretch" Margin="5,0,5,0" Grid.Column="1" />
        </Grid>
      </Border>
    </ControlTemplate>
  </Setter.Value>
</Setter>
</Style>

1 个答案:

答案 0 :(得分:2)

我的第一个猜测是,由于您的按钮绑定到Command,因此该命令的CanExecute应为return false

这是Command的原则和好处:当can执行返回false时,它会自动禁用相关按钮。

检查此链接以获取有关命令和MVVM的更多信息:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

http://msdn.microsoft.com/fr-fr/magazine/cc785480.aspx#id0190094