2013-11-21 2 views
0

Я хочу передать два изображения в пользовательский controlcontract, который должен иметь два свойства, которые нужно установить, один для источника каждого изображения.WPF Usercontrol с настраиваемыми свойствами

Но я столкнулся с проблемой с 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"); 
     } 
    } 
} 

На мой взгляд MainWindow я только инстанцирования 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 и UserControls все же, я не имею ни малейшего понятия, что случилось. Без usercontrol он отлично работает, но аутсорсинг таким образом, мое окно сохраняет «белый».

У кого-то появилась идея, что пошло не так?

+0

Unrelated: используйте [Path.Combine] (http://msdn.microsoft.com/en-us/library/system.io.path.combine (V = против. 110) .aspx) для объединения частей пути. – Athari

+0

Спасибо, всегда открыты для предложений :) – Jannik

ответ

2

Вы не должны устанавливать DataContext из UserControl в себя. Однако ваша настоящая проблема исходит от вашего Binding на элементах Image. Вы должны использовать вместо RelativeSource Binding:

<Image Grid.Column="1" Source="{Binding SourceLeft, RelativeSource={RelativeSource 
    AncestorType={x:Type YourXmlNamespacePrefix:HandControl}}}" /> 
<Image Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Source="{Binding SourceRight, 
    RelativeSource={RelativeSource AncestorType={x:Type YourXmlNamespacePrefix: 
    HandControl}}}" /> 
Смежные вопросы