gpt4 book ai didi

c# - 将三个 slider 值组合成一个 Texblock 文本/标签内容?

转载 作者:行者123 更新时间:2023-11-30 21:39:33 27 4
gpt4 key购买 nike

我目前正在开发一个用户界面,用户可以在其中通过三个单独的 slider 选择三个值。我在 slider 前面有三个文本 block 来指示特定 slider 的当前值:

在 .xaml 中:

<Label Content="Sample Selection" FontSize="16" FontStyle="Italic" FontWeight="Bold" HorizontalAlignment="Left" Margin="0,-30,0,0" VerticalAlignment="Top"/>
<Label Content="Patient Samples (max 64)" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" FontStyle="Italic"/>
<Slider x:Name="SampleAmountSlider" HorizontalAlignment="Left" Margin="181,14,0,0" VerticalAlignment="Top" Cursor="Hand" Width="160" Maximum="64" ValueChanged="SampleAmountSlider_ValueChanged" IsSnapToTickEnabled="True"/>
<TextBlock x:Name="SampleSliderValue" HorizontalAlignment="Left" Margin="165,16,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top"/>
<Label Content="Calibrators (max 7)" HorizontalAlignment="Left" Margin="10,36,0,0" VerticalAlignment="Top" FontStyle="Italic"/>
<Slider x:Name="CalAmountSlider" HorizontalAlignment="Left" Margin="181,40,0,0" VerticalAlignment="Top" Cursor="Hand" Width="160" Maximum="7" ValueChanged="CalAmountSlider_ValueChanged" IsSnapToTickEnabled="True"/>
<TextBlock x:Name="CalSliderValue" HorizontalAlignment="Left" Margin="165,42,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top"/>
<Label Content="Control Samples (max 4)" HorizontalAlignment="Left" Margin="10,62,0,0" VerticalAlignment="Top" FontStyle="Italic"/>
<Slider x:Name="ControlAmountSlider" HorizontalAlignment="Left" Margin="181,66,0,0" VerticalAlignment="Top" Cursor="Hand" Width="160" Maximum="4" ValueChanged="ControlAmountSlider_ValueChanged" IsSnapToTickEnabled="True"/>
<TextBlock x:Name="ControlSliderValue" HorizontalAlignment="Left" Margin="165,68,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top"/>
<Label Content="Total Sample Preparations Selected:" HorizontalAlignment="Left" Margin="10,105,0,0" VerticalAlignment="Top" FontWeight="Bold" FontStyle="Italic"/>
<TextBlock x:Name="TotalPrepValue" HorizontalAlignment="Left" Margin="225,110,0,0" FontWeight="Bold" FontStyle="Italic" Text="0" VerticalAlignment="Top"/>

在 .xaml.cs 中:

private void SampleAmountSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
SampleSliderValue.Text = Math.Round(e.NewValue, 0).ToString();
}

private void CalAmountSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
CalSliderValue.Text = Math.Round(e.NewValue, 0).ToString();
}

private void ControlAmountSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
ControlSliderValue.Text = Math.Round(e.NewValue, 0).ToString();
}

我想要的是最后一个文本 block (名为 TotalPrepValue),其中包含患者样本数量、校准品数量和对照样本数量的总和。

我不确定我是不是问的太多了还是不清楚(如果是这样,请告诉我。我会尽快回答)。问题是我是一个非常缺乏经验的程序员,但愿意学习!预先感谢您的帮助!

最佳答案

就我个人而言,这就是我会做的。但是,如果您喜欢它,请也去投票 @JerryNixon 的 answer here因为使用 slider 代替他的示例基本上只是重构,他值得更多表扬。通常我会直接向您指出它,但我知道当您刚开始做某事时情况如何,更清晰的 PoC 会更有用。

无论如何,开始吧,一张漂亮的照片......

enter image description here

XAML;

<Window.Resources>
<local:SumConverter x:Key="MySumConverter" />
</Window.Resources>
<Grid>


<StackPanel VerticalAlignment="Center">
<StackPanel.Resources>
<Style TargetType="Slider">
<Setter Property="Margin" Value="10"/>
<Setter Property="Width" Value="200"/>
<Setter Property="Minimum" Value="0"/>
<Setter Property="Maximum" Value="100"/>
</Style>
</StackPanel.Resources>

<Slider x:Name="Slider1"></Slider>
<Slider x:Name="Slider2"></Slider>
<Slider x:Name="Slider3"></Slider>

<TextBlock HorizontalAlignment="Center" TextAlignment="Center">
<Run Text="{Binding Value, ElementName=Slider1}"/>
<LineBreak/><LineBreak/>
<Run Text="{Binding Value, ElementName=Slider2}"/>
<LineBreak/><LineBreak/>
<Run Text="{Binding Value, ElementName=Slider3}"/>
<LineBreak/>
<Run Text="______________________"/>
<LineBreak/><LineBreak/>
<Run>
<Run.Text>
<MultiBinding Converter="{StaticResource MySumConverter}"
StringFormat="{}{0:C}"
FallbackValue="Error" TargetNullValue="Null">
<Binding Path="Value" ElementName="Slider1"/>
<Binding Path="Value" ElementName="Slider2"/>
<Binding Path="Value" ElementName="Slider3"/>
</MultiBinding>
</Run.Text>
</Run>
</TextBlock>

</StackPanel>


</Grid>

转换器;

public class SumConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
double _Sum = 0;
if (values == null)
return _Sum;
foreach (var item in values)
{
double _Value;
if (double.TryParse(item.ToString(), out _Value))
_Sum += _Value;
}
return _Sum;
}

public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

希望这有帮助,干杯。

关于c# - 将三个 slider 值组合成一个 Texblock 文本/标签内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45170241/

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