0

我有一个滑块控件,它将选择列表中的一个元素。我需要显示所选元素的 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();
        }
    }
}
4

1 回答 1

3

我在您的 XAML 中没有看到任何名为lstResoultions

DependencyProperty.UnsetValue是 WPF 的属性系统使用的,而不是null表示该属性存在,但它没有值

于 2012-06-18T17:12:05.553 回答