gpt4 book ai didi

WPF:将 slider 值绑定(bind)到 XAML 中的工具提示内容字符串的数据

转载 作者:行者123 更新时间:2023-12-04 23:02:58 24 4
gpt4 key购买 nike

在基于 C# 的 WPF 用户控件中,我有一组 slider 来调整颜色元素的红色、绿色和蓝色值;本质上 UserControl 是一个颜色选择器。我为 ToolTipOpening 事件处理程序提供了 XAML 和 C# 代码的组合,它允许我设置表示颜色组件属性值的单个整数值。因此,如果我将 slider 定位为调整 slider 中间颜色中的红色量,工具提示将显示“红色:125”,因为每个颜色组件属性值的范围可以从 0 到 255。代码片段下面的 XAML 和 C# 都按预期工作:

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;
}

有没有办法消除后面的代码并使用 设置工具提示内容以显示相同的字符串?工具提示.内容 工具提示.ContentStringFormat 仅在 XAML 中的属性,允许在 C# 后面的代码中消除 ToolTipOpening 事件处理程序?我使用 DataBinding 尝试了以下 XAML 来格式化 slider 工具提示的内容字符串:

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>

工具提示弹出窗口显示为空:

*Slider with Empty ToolTip using XAML only*

最佳答案

根据 ElementName 绑定(bind)就像 RelativeSourceFindAncestor不在范围内,因为 ToolTipPopup这不是 VisualTree 的一部分(它创建自己的)。但是您可以使用 ToolTip.PlacementTarget Property获取 Slider控制和捕捉值(value)。

<Slider.ToolTip>
<ToolTip Content="{Binding RelativeSource={RelativeSource Self},
Path=PlacementTarget.Value}"
ContentStringFormat="Blue: {0:0}" />
</Slider.ToolTip>

请注意额外的 :0ContentStringFormat="Blue: {0:0}"将值四舍五入。

关于WPF:将 slider 值绑定(bind)到 XAML 中的工具提示内容字符串的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com