我有一个滑块控件,可以选择列表中的元素。我需要显示所选元素的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();
}
}
}
答案 0 :(得分:3)
我没有在您的XAML中看到名为lstResoultions
DependencyProperty.UnsetValue是WPF的属性系统使用而不是null
来表示该属性存在,但它没有值