2012-07-14 99 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"将导致形状调整大小,使其适合您指定的任何尺寸。