WPF: Data Binding Ein Schieberegler-Wert Zu Einem QuickInfo-Zeichenfolge für Inhalt, die In XAML
In einem C# - basierten WPF-UserControl habe ich eine Reihe von Schiebereglern zum anpassen der Rot -, Grün-und Blau-Werte der Farbe, element; im wesentlichen die UserControl ist ein color-picker. Ich habe eine Kombination XAML und C# - code-behind für die ToolTipOpening Event-Handler, der mir erlaubt, setzen Sie die einzelnen integer-Wert, der die Farbe Komponente Eigenschaft-Wert. Also, wenn ich die regler positioniert ist, zum einstellen der Menge von Rot in der Farbe, in der Mitte der Regler, der ToolTip-Anzeige "Rot: "125", da jede Farbe Komponente Eigenschaft Wert kann im Bereich von 0 bis 255. Die code-Fragmente unten für beide die XAML-und C# funktionieren wie erwartet:
XAML:
<UserControl x:Class="CustomColorPicker.ColorPickerUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="colorPicker">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="175" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Label HorizontalAlignment="Right">Red:</Label>
<Slider Grid.Row="0" Grid.Column="1" Name="sliderRed" Minimum="0" Maximum="255"
Margin="{Binding ElementName=colorPicker, Path=Padding}"
Value="{Binding ElementName=colorPicker, Path=Red}"
ToolTipOpening="OnColorSliderToolTipOpening"
ToolTip="Red: 0" />
<Label Grid.Row="1" Grid.Column="0" HorizontalAlignment="Right">Green:</Label>
<Slider Grid.Row="1" Grid.Column="1" Name="sliderGreen" Minimum="0" Maximum="255"
Margin="{Binding ElementName=colorPicker, Path=Padding}"
Value="{Binding ElementName=colorPicker, Path=Green}"
ToolTipOpening="OnColorSliderToolTipOpening" ToolTip="Green: 0" />
<Label Grid.Row="2" Grid.Column="0" HorizontalAlignment="Right">Blue:</Label>
<Slider Grid.Row="2" Grid.Column="1" Name="sliderBlue" Minimum="0" Maximum="255"
Margin="{Binding ElementName=colorPicker, Path=Padding}"
Value="{Binding ElementName=colorPicker, Path=Blue}"
ToolTipOpening="OnColorSliderToolTipOpening" ToolTip="Blue: 0" />
<Rectangle Grid.Column="2" Grid.RowSpan="3"
Margin="{Binding ElementName=colorPicker, Path=Padding}"
Width="85" Stroke="Black" StrokeThickness="1">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding ElementName=colorPicker, Path=Color}" />
</Rectangle.Fill>
</Rectangle>
</Grid>
</UserControl>
C#:
private void OnColorSliderToolTipOpening(object sender, ToolTipEventArgs e)
{
Slider slider = (Slider) sender;
string colorName = "N/A";
int colorValue = 0;
if (slider.Name == "sliderRed")
{
colorName = "Red";
colorValue = (int) Color.R;
}
else if (slider.Name == "sliderGreen")
{
colorName = "Green";
colorValue = (int) Color.G;
}
else if (slider.Name == "sliderBlue")
{
colorName = "Blue";
colorValue = (int) Color.B;
}
string colorTip =
string.Format("{0}: {1}", colorName, colorValue.ToString());
slider.ToolTip = colorTip;
return;
}
Gibt es eine Möglichkeit Sie zu beseitigen der code hinter, und legen Sie die ToolTip-Inhalt anzeigen, den gleichen string mit Hilfe der ToolTip.Inhalt und ToolTip.ContentStringFormat Eigenschaften in XAML nur, so dass für die Beseitigung der ToolTipOpening event-handler in der code-behind in C#? Ich habe versucht, die folgenden XAML-Code mithilfe der Datenbindung formatieren der Zeichenfolge für Inhalt, an der der Schieberegler im ToolTip:
XAML:
<Slider Grid.Row="2" Grid.Column="1" Name="sliderBlue" Minimum="0" Maximum="255"
Margin="{Binding ElementName=colorPicker, Path=Padding}"
Value="{Binding ElementName=colorPicker, Path=Blue}">
<Slider.ToolTip>
<ToolTip
Content="{Binding ElementName=colorPicker, Path=Blue}"
ContentStringFormat="{}Blue: {0}" />
</Slider.ToolTip>
</Slider>
werden und der ToolTip Popup display ist leer:
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bindung pro
ElementName
wieRelativeSource
mitFindAncestor
ist nicht im scope, daToolTip
ist einPopup
was ist kein Teil des VisualTree (er schafft seinen eigenen). Aber Sie können den ToolTip.PlacementTarget Eigenschaft, um dieSlider
Kontrolle und fangen Sie den Wert.Bitte beachten Sie die zusätzlichen
:0
imContentStringFormat="Blue: {0:0}"
zu Runde Wert.