我似乎无法创建一个看起来像这样的按钮(见图片)。 2合1按钮像双按钮
我试着到网格,2个椭圆和2周的TextBlocks的东西,看起来像它结合,但不能得到两个不同的按钮看的权利..
它通常以按钮拆分一半,然后转化成2个独立的按钮,S按钮和A按钮..
任何输入将是非常有益..
我似乎无法创建一个看起来像这样的按钮(见图片)。 2合1按钮像双按钮
我试着到网格,2个椭圆和2周的TextBlocks的东西,看起来像它结合,但不能得到两个不同的按钮看的权利..
它通常以按钮拆分一半,然后转化成2个独立的按钮,S按钮和A按钮..
任何输入将是非常有益..
用1个网格,2个椭圆和2周的TextBlocks我得到它的工作摆弄后.. 和2个用于调整大小的Viewbox。
的XAML:
<Window x:Class="Dual_Button.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Dual_Button"
mc:Ignorable="d"
Title="Dual Button" Height="260" Width="260">
<Window.Resources>
<Style x:Key="FocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/>
<SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/>
<SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/>
<SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/>
<SolidColorBrush x:Key="SubBack" Color="#FFD1FF00"/>
<SolidColorBrush x:Key="AudioBack" Color="#FF00C5FF"/>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid x:Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Ellipse x:Name="sub_Background" Height="{Binding ActualHeight, ElementName=grid, Mode=OneWay}" Width="{Binding ActualWidth, ElementName=grid, Mode=OneWay}" Fill="{DynamicResource SubBack}"/>
<Button x:Name="btn_Sub" Background="{x:Null}" Foreground="White" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" VerticalAlignment="Center" Padding="0" BorderThickness="0" Click="btn_Sub_Click" Style="{DynamicResource ButtonStyle1}" MouseEnter="btn_Sub_MouseEnter" MouseLeave="btn_Sub_MouseLeave">
<Viewbox Margin="25,10,10,25">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="S"/>
</Viewbox>
</Button>
<Ellipse x:Name="Audio_Background" Height="{Binding ActualHeight, ElementName=grid, Mode=OneWay}" Width="{Binding ActualWidth, ElementName=grid, Mode=OneWay}" Fill="{DynamicResource AudioBack}" Grid.Column="1" HorizontalAlignment="Right"/>
<Button x:Name="btn_Audio" Background="{x:Null}" Foreground="White" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" VerticalAlignment="Center" Padding="0" BorderThickness="0" Grid.Column="1" Click="btn_Audio_Click" Style="{DynamicResource ButtonStyle1}" MouseEnter="btn_Audio_MouseEnter" MouseLeave="btn_Audio_MouseLeave">
<Viewbox Margin="10,10,25,25">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="A"/>
</Viewbox>
</Button>
</Grid>
</Window>
后面的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
void btn_Sub_MouseEnter(object sender, MouseEventArgs e)
{
try { sub_Background.Fill = Brushes.Red; } catch { }
}
void btn_Sub_MouseLeave(object sender, MouseEventArgs e)
{
try { sub_Background.Fill = (Brush)FindResource("SubBack"); } catch { }
}
void btn_Sub_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Subtitles");
}
void btn_Audio_MouseEnter(object sender, MouseEventArgs e)
{
try { Audio_Background.Fill = Brushes.Purple; } catch { }
}
void btn_Audio_MouseLeave(object sender, MouseEventArgs e)
{
try { Audio_Background.Fill = (Brush)FindResource("AudioBack"); } catch { }
}
void btn_Audio_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Audio");
}
}
这是我的结果:它的规模能..
当鼠标进入S钮半圈将变成红色。 当鼠标进入A按钮时,半圈将变成紫色。
我可能已经设法创建了你正在寻找的东西。请注意,这需要进一步工作因为很多功能没有实现。我所做的只是创建一个“DualButton”,它具有单独的可点击部分,并且看起来像您所提供的。
你可以根据我的例子制定出你自己的风格和功能。
首先,如何看起来:
现在,该代码。我将它定义为一个userControl,以实现更轻松的管理和可重用性,而不会使XAML过多。
XAML:
<UserControl x:Class="WpfApplication2.DualButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApplication2"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Button Click="Button_Click_1">
<Button.Template>
<ControlTemplate>
<Grid>
<Path Fill="Lime" >
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="150,0">
<ArcSegment IsLargeArc="True"
Size="50, 50"
Point="150, 300"
SweepDirection="Counterclockwise" />
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
<TextBlock Margin="49,46,171,83" FontSize="150" TextAlignment="Center" HorizontalAlignment="Center" Foreground="White">S</TextBlock>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
<Button Click="Button_Click_2">
<Button.Template>
<ControlTemplate>
<Grid>
<Path Fill="Blue" >
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="150,0">
<ArcSegment IsLargeArc="True"
Size="50, 50"
Point="150, 300"
SweepDirection="Clockwise" />
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
<TextBlock Margin="162,47,41,84" FontSize="150" TextAlignment="Center" HorizontalAlignment="Center" Foreground="White" Width="97">A</TextBlock>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
那么,什么是真正发生在这里?
首先,当然有布局网格。它包含两个buttons
,它们的模板设置为PathGeometry
以创建一个椭圆。 (这里已经是一些改进的地方 - 我用固定值,所以button
不会真正可扩展的尝试这些特性与grid
大小连接。)
再有就是对按钮半明显字母textBlock
。再一次,我没有放置过多的麻烦,我只是拖着他们,所以他们看起来不错。你可以工作,这对自己太(我希望:d)现在
,与后台代码:
public partial class DualButton : UserControl
{
public DualButton()
{
InitializeComponent();
}
public static readonly RoutedEvent ClickEvent =
EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(DualButton));
public event RoutedEventHandler Click
{
add { AddHandler(ClickEvent, value); }
remove { RemoveHandler(ClickEvent, value); }
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
System.Windows.MessageBox.Show("Left");
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
System.Windows.MessageBox.Show("Right");
}
}
在这里,我们要添加一个RoutedEvent
,使我们的按钮实际上是点击。我还添加了一些事件处理程序来检查一切是否按预期工作(它的确如此!)
再次,这只是一个简单的例子,并没有经过优化。有很大的改进空间。我只是想把你推向正确的方向。
如果您有任何问题,请随时询问。
看看我自己的答案..并看看你是否喜欢它..唯一觉得我不喜欢你的答案是你用于半圆形状的路径.. – ArchAngel
我也喜欢你的答案。至于路径,我不同意,因为使用正确的绑定可以产生任何想要的形状(不只是椭圆形)。你的viewBox理念也非常好,你的答案比我的MVVM多得多,这非常棒。说实话,我以为你不知道如何解决这个问题,所以我刚刚创建了一个快速划分的示例,它是硬编码的,并且不会对写入的样式产生太大的影响。我猜我们的答案都有优点,缺点,但现在你的是更发达:) –
我不是新手,即使我可以自己做,有时我喜欢看别人怎么做..而且我给了你+1投票,因为你的答案不是不好.. – ArchAngel
听起来像所有你真正需要的是2个按钮紧挨着。按钮1是左边的半圆形,按钮2是右边的,然后只是按钮的内容或模板的样式来看看你想要的。 – Logan
发表评论前,你甚至读过任何答案吗? – ArchAngel
您还没有标记出其中的一个作为您正在寻找的答案。如果其中一人回答了您的问题,请将其作为您选择的答案进行检查,否则请不要期待有人进来并对此发表评论,好友。 – Logan