Ich habe wahrscheinlich geschafft zu schaffen, was Sie gesucht haben. Bitte beachten Sie, dass dies weitere Arbeit erfordert, da eine Menge Funktionalität nicht implementiert wurde. Was ich gemacht habe, war nur ein "DualButton" zu erstellen, das separate anklickbare Teile hat und so aussieht, wie du es angegeben hast.
Sie können Ihren eigenen Stil und Funktionalität basierend auf meinem Beispiel erarbeiten.
Erstens, wie es aussieht:
Nun, um den Code. Ich habe es als userControl definiert, um die Verwaltung und Wiederverwendbarkeit zu vereinfachen, ohne XAML zu sehr zu belasten.
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>
Also, was tatsächlich geschieht hier?
Zunächst gibt es natürlich das Layout-Raster. Es enthält zwei buttons
, deren Vorlage auf PathGeometry
festgelegt ist, um eine Ellipse zu erstellen. (Hier ist schon etwas Platz für Verbesserungen - Ich benutzte Werte festgelegt, so dass die button
nicht wirklich skalierbar sein Versuchen Sie diese Eigenschaften mit einer grid
Größe zu verbinden.)
Dann gibt ein textBlock
auf offensichtliche Buchstaben auf die Schaltfläche Hälften . Auch hier habe ich mich nicht zu sehr mit dem Platzieren beschäftigt, ich habe sie einfach mitgeschleppt, damit sie gut aussahen.Sie können dies auch auf eigene Faust trainieren (ich hoffe: D)
Jetzt, mit der Code-Behind:
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");
}
}
Hier haben wir eine RoutedEvent
hinzufügen unsere Taste tatsächlich anklickbar zu machen. Ich fügte auch einige Ereignisbehandlungsroutinen hinzu, um zu überprüfen, ob alles wie erwartet funktionierte (es tat!)
Wieder ist dies nur ein schnelles Beispiel und ist keineswegs optimiert. Es gibt viel Raum für Verbesserungen. Ich wollte dich nur in die richtige Richtung drängen.
Wenn Sie weitere Fragen haben, zögern Sie nicht zu fragen.
Klingt wie alles, was Sie wirklich brauchen, ist 2 Tasten direkt nebeneinander. Taste 1 ist der linke Halbkreis und Taste 2 ist die rechte, dann style entweder den Inhalt oder die Vorlage der Tasten, um zu sehen, wie Sie wollen. – Logan
Hast du überhaupt eine der Antworten gelesen, bevor du einen Kommentar postest ?? – ArchAngel
Sie haben keinen einzigen von ihnen als die Antwort markiert, nach der Sie suchen. Wenn einer von Ihnen Ihre Frage beantwortet, überprüfen Sie es als Ihre gewählte Antwort, ansonsten erwarten Sie immer Leute kommen und kommentieren, Kumpel. – Logan