具有自定义属性的WPF Usercontrol

时间:2013-11-21 08:51:32

标签: c# wpf user-controls

我想将两个图像外包给自定义用户控件,该用户控件应该设置两个属性,一个用于每个图像的源。

但是我遇到了无法正确识别的datacontext。它也可能是一个问题,它是我第一次使用依赖属性。无论如何,我希望你能弄清楚我的想法并在这里帮助我,这里有源代码:

MainViewModel:

public class MainWindowViewModel : INotifyPropertyChanged
{
    private string _spielerL1;
    private string _spielerL2;

    public MainWindowViewModel()
    {
        SpielerL1 = System.IO.Directory.GetCurrentDirectory() + @"\Images\queen_of_clubs.png";
        SpielerL2 = System.IO.Directory.GetCurrentDirectory() + @"\Images\queen_of_diamonds.png";
    [...]
}

    public string SpielerL1
    {
        get { return _spielerL1; }
        private set
        {
            _spielerL1 = value;
            OnPropertyChanged("SpielerL1");
        }
    }

    public string SpielerL2
    {
        get { return _spielerL2; }
        private set
        {
            _spielerL2 = value;
            OnPropertyChanged("SpielerL2");
        }
    }
}

在我的主窗口视图中,我只是实例化viewmodel并使用带有 SourceLeft =“{Binding SpielerL1}”的控件和SourceRight =“{Binding SpielerL2}”......

我的后面的控制代码看起来像这样(删除了sourceright以缩短它):

public partial class HandControl
{
    public HandControl()
    {
        InitializeComponent();
        DataContext = this;
    }

    public string SourceLeft 
    {
        get
        {
            return (string) GetValue(SourceLeftProperty);
        }
        set
        {
            SetValue(SourceLeftProperty, value);
        }
    }
    public static readonly DependencyProperty SourceLeftProperty = DependencyProperty.Register("SourceLeft", typeof(string), typeof(HandControl), new PropertyMetadata(""));
}

最后我的usercontrol xaml,它没有识别datacontext或者至少没有显示我的图像:

<UserControl x:Class="FoolMe.Gui.Controls.HandControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>
        <Image Grid.Column="1" 
               Source="{Binding SourceLeft}" />
        <Image Grid.Row="0"
               Grid.Column="0"
               Grid.ColumnSpan="2" 
               Source="{Binding SourceRight}" />
    </Grid>
</UserControl>

由于我还没有完成WPF和用户控制,我没有任何线索,但是错了。没有用户控制,它工作正常,但像这样外包,我的窗口保持“白色”。

任何人都有了想法,出了什么问题?

1 个答案:

答案 0 :(得分:2)

您不应将DataContext的{​​{1}}设置为自身。但是,您的真正问题来自UserControl元素上的Binding。您应该使用Image代替:

RelativeSource Binding