2012-03-27 1 views
0

Я сделал кнопку на заказ породы по этому примеру:Как настроить расширенный стиль на пользовательской кнопке поверхности

<Button> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Grid> 
       <!-- my custom shape --> 
            <Polygon 
            Points="400,150 100,350 100,350, 500,350" 
            Stroke="Purple" 
            StrokeThickness="2" 
            Name="L1"> 
             <Polygon.Fill> 
              <SolidColorBrush Color="Blue" Opacity="0.4"/> 
             </Polygon.Fill> 
        </Polygon> 
       <ContentPresenter /> 
      </Grid> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

Но есть проблема со стилями - нет поведения при прикосновении/holded/отпущено. Не могли бы вы дать мне понять, как это сделать?

благодаря

ответ

1

Шаблон контрольный пример (найденный в msdn) является:

<Style TargetType="Button"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/> 
    <Setter Property="MinHeight" Value="23"/> 
    <Setter Property="MinWidth" Value="75"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="Button"> 
     <Border 
      x:Name="Border" 
      CornerRadius="2" 
      BorderThickness="1" 
      Background="{StaticResource NormalBrush}" 
      BorderBrush="{StaticResource NormalBorderBrush}"> 
      <ContentPresenter 
      Margin="2" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      RecognizesAccessKey="True"/> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsKeyboardFocused" Value="true"> 
      <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DefaultedBorderBrush}" /> 
      </Trigger> 
      <Trigger Property="IsDefaulted" Value="true"> 
      <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DefaultedBorderBrush}" /> 
      </Trigger> 
      <Trigger Property="IsMouseOver" Value="true"> 
      <Setter TargetName="Border" Property="Background" Value="{StaticResource DarkBrush}" /> 
      </Trigger> 
      <Trigger Property="IsPressed" Value="true"> 
      <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush}" /> 
      <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PressedBorderBrush}" /> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="false"> 
      <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" /> 
      <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" /> 
      <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

Как вы можете видеть, что Вы раздели все триггеры, не говоря уже о визуальных стилей.

Я бы взял этот код и положил ваш полигон вместо ContentPresenter.

+0

Эти страницы приводят примеры, а не оригинальные шаблоны, см. [Этот вопрос] (http://stackoverflow.com/questions/1559261/control-template-for-existing-controls-in-wpf). –

+0

@ H.B. спасибо, я исправил. –