Ändern Sie die Bilder auf Benutzerdefinierte Kontrollkästchen in WPF
Alle ich habe die folgende benutzerdefinierte CheckBox
die Bilder verwendet statt einer CheckBox
. Dies funktioniert gut, allerdings möchte ich in der Lage sein, ändern Sie die Bilder wie gewünscht. Idealerweise würde ich gerne verwenden Anwendung Ressourcen Properties.Resources.SomeImage16
(ein .png-Datei). XAML ist
<Style x:Key="styleCustomCheckBox"
TargetType="{x:Type CheckBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<StackPanel Orientation="Horizontal">
<Image x:Name="imageCheckBox"
Width="16"
Height="16"
Source="F:\Camus\ResourceStudio\Graphics\Images\UnPinned16.png"/>
<ContentPresenter VerticalAlignment="Center"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="False">
<Setter TargetName="imageCheckBox"
Property="Source"
Value="F:\Camus\ResourceStudio\Graphics\Images\Pinned16.png"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="imageCheckBox"
Property="Source"
Value="F:\Camus\ResourceStudio\Graphics\Images\UnPinned16.png"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Umsetzung
<ListBox SelectionMode="Single" >
<StackPanel Orientation="Horizontal">
<CheckBox Style="{StaticResource styleCustomCheckBox}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Margin="4,0,4,0"/>
<TextBlock VerticalAlignment="Top"
Text="SomeRecentDocument.resx"/>
</StackPanel>
</ListBox>
Wie kann ich die Bilder für die benutzerdefinierten CheckBox
(d.h. die angepinnt/nicht angepinnt zu kreuzen/Kreuz etc.) ohne das erstellen einer neuen Formatvorlage/Vorlage?
Vielen Dank für Ihre Zeit.
- 1 - verwenden Sie keine PNGs für alles. WPF ist nicht winforms. Verwenden Sie Vektorgrafiken, Wann immer möglich. 2 - möchten Sie vielleicht, um einige
Attached Properties
und binden, die in derControlTemplate
. - Wenn das erlaubt war, dann ein .NET-Anwendung hätte Zugriff auf ein beliebiges Laufwerk.
- Es ist nicht klar, was Sie Fragen... ist es über das ändern der Bild basierend auf den Zustand einer checkbox? Wenn ja, mit Triggern arbeiten würde, aber Sie haben schon löst es... ist es, dass die Lösung, die Sie versucht, nicht funktioniert und Sie brauchen Hilfe, um es zu arbeiten?
- Ich habe eine funktionierende benutzerdefinierte Kontrollkästchen-Steuerelement mit Bildern als angeheftete/ohne Führungsstift. Ich möchte wissen, wie/ob es möglich ist, ändern sich die Bilder für diese Staaten, wenn ich die Kontrolle...
- wie kann ich eine Vektor-Bild von meiner Expression Design .design-Dateien? Ich kann exportieren, um XAML, aber die exportierten Ergebnisse für einige Bilder sind Komplex und aus vielen Schichten...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits erwähnt
@HighCore
die Notwendigkeit für die Fähigkeit, Vektor-Grafiken. In diesem Fall verwenden Sie diePath
, wo inData
zu den angegebenen Koordinaten, auf dem das Objekt gezeichnet (MSDN
).Vorteile:
Speichern Sie es nicht in den Akten, kleinere Größe
Dynamisch ändern von Farbe, Größe und die ganze Form
Nachteile (meiner Meinung nach):
Data
für diePath
Etwa minus: Es gibt spezielle Websites (http://www.modernuiicons.com) und Programme für die Konvertierung das Bild zu
Data
.Ändern Sie den Stil des
CheckBox
mit derPath
:Style
Using
Output
Können wir auch speichern
Path's
in Ressourcen und beziehen sich auf Sie als wie dies:Edit
Angeben, beliebige Symbole, ich habe zwei beigefügten dependency properties (string-Typ):
IsCheckedOnData
IsCheckedOffData
IsCheckedOnData
enthältData
Wert vonIsChecked = "True"
,IsCheckedOffData
Wert vonIsChecked = "False"
.Nun müssen Sie nur, um zu bestimmen, die Zeichenfolgen von Symbolen und definieren, wie eine Ressource (zum Beispiel).
Vollständigen Beispiel:
XAML
Code behind
Note:
Im Stil, den ich nicht verwendet habeTemplateBinding
weilTemplateBinding
funktioniert nicht außerhalb einer Vorlage oder außerhalb seiner VisualTree Eigenschaft, so können Sie nicht einmal mitTemplateBinding
innerhalb einer Vorlage-Auslöser. Daher müssen wir mit dem Bau{RelativeSource TemplatedParent}
und einPath
gleich die Abhängigkeit Eigenschaft, dessen Wert Sie abrufen möchten.Sorry, ich weiß aber noch nicht wie auf einem Bild in die Ressourcen, aber wenn Sie können, fügen Sie die Bilder in einen Ordner namens
Images
in Ihrer Anwendung root-Verzeichnis, dann werden Sie in der Lage sein, verweisen die Bilder einfach so: