我有一个滑块控件,它将选择列表中的一个元素。我需要显示所选元素的 ToString()。我遇到的问题是values
我的IMultiValueConverter.Convert
函数中的值总是有一个正确的值,values[0]
但values[1]
总是DependencyProperty.UnsetValue
。我在绑定中做错了什么?
这是我的 XAML
<Window x:Class="VetWebConnectorWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:VetWebConnectorWPF"
<!--Snip-->
>
<Grid>
<!--Snip-->
<GroupBox Grid.Row="1" Height="Auto" Header="Display configuration">
<Grid>
<!--Snip-->
<Grid Grid.Row="1" Width="200">
<!--Snip-->
<Slider Name="sldrResoultion" Grid.Column="1" TickPlacement="BottomRight" Minimum="0" Maximum="{Binding ElementName=lstResoultions, Path=Count}" TickFrequency="1"
IsSnapToTickEnabled="True"/>
</Grid>
<Label Name="lblResoultionDisplay" Grid.Row="2" HorizontalAlignment="Center">
<Label.Resources>
<local:ResoutionConverter x:Key="resoutionConverter" />
</Label.Resources>
<Label.Content>
<MultiBinding Converter="{StaticResource resoutionConverter}">
<Binding ElementName="sldrResoultion" Path="Value" />
<Binding ElementName="lstResoultions" />
</MultiBinding>
</Label.Content>
</Label>
</Grid>
</GroupBox>
</Grid>
</Window>
这是我的 MainWindow 代码隐藏
namespace VetWebConnectorWPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.lstResoultions = new List<object>();
AddResoution(new Resoultion(1024, 768));
AddResoution(new Resoultion(1366, 768));
AddResoution(new Resoultion(1280, 960));
AddResoution(new Resoultion(1440, 900));
AddResoution(new Resoultion(1280, 1024));
AddResoution(new Resoultion(1600, 900));
AddResoution(new Resoultion(1400, 1050));
AddResoution(new Resoultion(1440, 1080));
AddResoution(new Resoultion(1600, 1200));
AddResoution(new Resoultion(1920, 1080));
AddResoution(new Resoultion(1920, 1200));
AddResoution(new Resoultion(2048, 1152));
AddResoution(new Resoultion(2560, 2048));
AddResoution(new Resoultion(3200, 2048));
this.lstResoultions.Add("Full Screen");
}
readonly List<object> lstResoultions;
//(Snip)
}
}
这是 Resoultion.cs 的代码
namespace VetWebConnectorWPF
{
public class Resoultion
{
public Resoultion(int width, int height)
{
this.Width = width;
this.Height = height;
}
public int Width { get; private set; }
public int Height { get; private set; }
public override string ToString()
{
return string.Concat(this.Width, " x ", this.Height);
}
}
class ResoutionConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values == null || values.Length != 2)
return null;
double? idx = values[0] as double?;
object[] resoultions = values[1] as object[];
if (!idx.HasValue || resoultions == null)
return null;
return resoultions[System.Convert.ToInt32(idx.Value)];
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}