Кнопки отключены в пользовательском элементе управления - PullRequest
1 голос
/ 25 мая 2011

Я сделал пользовательский элемент управления в 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 Ответ

2 голосов
/ 25 мая 2011

Мое первое предположение состоит в том, что, поскольку ваша кнопка связана с Command, CanExecute команды должен return false.

Это принцип и преимущество Command: когда команда execute возвращает false, она автоматически отключает соответствующую кнопку.

Проверьте эти ссылки для получения дополнительной информации о командах и MVVM:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...