2012-07-14 98 views
1

請我需要在wpf中創建六角形菜單作爲面板,但是我不知道如何創建面板爲六角形 注意我需要創建它而不是繪製它。 感謝如何創建使用WPF的六角形菜單?

+1

你有什麼試過?也許從[這個問題]開始(http://stackoverflow.com/questions/1443598/creating-grid-of-hexagons),看看你可以做什麼,一旦你創建六邊形控件? – 2012-07-14 17:31:29

+0

不是這樣,它是談論繪圖我需要創建它作爲面板。 – 2012-07-14 17:41:08

+0

你能解釋一下你想在六角形中控制嗎? – ethicallogics 2012-07-14 17:57:02

回答

3

嘗試類似的東西:

<Window x:Class="HexagonMenu.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 

    <Window.Resources> 
     <Style x:Key="ButtonFocusVisual"> 
      <Setter Property="Control.Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Border> 
          <Rectangle 
           Margin="2" 
           StrokeThickness="1" 
           Stroke="#60000000" 
           StrokeDashArray="1 2"/> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <LinearGradientBrush x:Key="NormalBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#CCC" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="HorizontalNormalBrush" StartPoint="0,0" EndPoint="1,0"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#CCC" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="LightBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#EEE" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="HorizontalLightBrush" StartPoint="0,0" EndPoint="1,0"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#EEE" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="DarkBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#AAA" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="PressedBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#BBB" Offset="0.0"/> 
        <GradientStop Color="#EEE" Offset="0.1"/> 
        <GradientStop Color="#EEE" Offset="0.9"/> 
        <GradientStop Color="#FFF" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" /> 

     <SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#EEE" /> 

     <SolidColorBrush x:Key="WindowBackgroundBrush" Color="#FFF" /> 

     <SolidColorBrush x:Key="SelectedBackgroundBrush" Color="#DDD" /> 

     <Style TargetType="Button"> 
      <Setter Property="SnapsToDevicePixels" Value="true"/> 
      <Setter Property="OverridesDefaultStyle" Value="true"/> 
      <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/> 
      <Setter Property="Height" Value="50"/> 
      <Setter Property="Width" Value="50"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Grid> 
          <Path x:Name="Hexagon" Stroke="Black" Stretch="Fill" Fill="{StaticResource NormalBrush}" 
            HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
            Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"         
            Data="M8.660254,0 L17.320508,5 17.320508,15 8.660254,20 0,15 0,5 8.660254,0 z"/> 
          <TextBlock Text="{Binding Path=Content, RelativeSource={RelativeSource Mode=TemplatedParent}}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
         </Grid> 

         <ControlTemplate.Triggers>        
          <Trigger Property="IsMouseOver" Value="true"> 
           <Setter TargetName="Hexagon" Property="Fill" Value="{StaticResource DarkBrush}" /> 
          </Trigger> 
          <Trigger Property="IsPressed" Value="true"> 
           <Setter TargetName="Hexagon" Property="Fill" Value="{StaticResource PressedBrush}" />         
          </Trigger> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter TargetName="Hexagon" Property="Fill" Value="{StaticResource DisabledBackgroundBrush}" />         
           <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

    </Window.Resources> 

    <DockPanel> 
     <WrapPanel x:Name="MyHexagonMenu" DockPanel.Dock="Top"> 
      <Button Content="File" /> 
      <Button Content="Edit" /> 
      <Button Content="About" /> 
      <Button Content="Exit" />    
     </WrapPanel> 

    </DockPanel> 
</Window> 
+0

在此先感謝 – 2012-07-14 18:10:38

1

如果你只是想要一個多邊形Path,你可以使用:

<Path Width="64" Height="64" Stretch="Uniform" Fill="Blue" 
     Data="M8.660254,0 L17.320508,5 17.320508,15 8.660254,20 0,15 0,5 8.660254,0 Z" /> 

在我的機器,看起來像這樣:

enter image description here

根據需要調整WidthHeight。請注意,生成的形狀爲而不是正方形,但Stretch="Uniform"將導致形狀調整大小,使其適合您指定的任何尺寸。