2015-03-12 2 views
0

Я создал UserControl, который использует несколько DependencyProperties. Когда у меня есть только один экземпляр UserControl, все работает так, как ожидалось. Однако, если я создаю несколько экземпляров объекта, работает только первый экземпляр (обратите внимание: ошибок не возникает). Единственное, о чем я могу думать, это то, что наличие нескольких экземпляров DependencyProperty невозможно. Это верно? Если да, есть ли альтернативы/обходные пути для этого?Несколько экземпляров UserControl с DependencyProperty

Вот пример того, как я установки в DependencyProperties: XML

public int Value 
    { 
     get { return (int)GetValue(ValueProperty); } 
     set { SetValue(ValueProperty, value); } 
    } 

    public static DependencyProperty ValueProperty= 
     DependencyProperty.Register("Value", typeof(int), typeof(DataBar), new PropertyMetadata(0)); 

для UserControl:

 x:Name="DataBarUserControl"> 
<Grid> 
    <Rectangle Name="BackgroundRec" Height="{Binding Height, ElementName=DataBarUserControl}" Width="{Binding Width, ElementName=DataBarUserControl}" 
           Fill="{Binding BarBackground, ElementName=DataBarUserControl}" HorizontalAlignment="Stretch" 
           VerticalAlignment="Top"> 
    </Rectangle> 

    <Rectangle Name="ShadowRec" Height="{Binding Height, ElementName=DataBarUserControl}" Fill="{Binding BarBackground, ElementName=DataBarUserControl}" 
           HorizontalAlignment="Left" Opacity="0.25" 
       Stroke="{Binding BarBackground, ElementName=DataBarUserControl}"> 
    </Rectangle> 

    <Rectangle Name="DataRec" Height="{Binding Height, ElementName=DataBarUserControl}" Fill="{Binding BarForeground, ElementName=DataBarUserControl}" 
           HorizontalAlignment="Left"> 
    </Rectangle> 
</Grid> 

ShadowRec & DataRec не отображаются вообще.

Update 1:

Я думаю, я нашел причину проблемы. В бэкэнд для UserControl я изменяю ShadowRec & DataRec, которые хранятся как частные статические переменные. Когда я отключу этот раздел кода, проблема исчезнет. Не уверен, что захвачен неправильный экземпляр, или если есть более конкретный способ, я должен хранить экземпляры.

+0

привет, пожалуйста, разместите свой xaml, где пользовательские элементы управления. – SWilko

+0

Отправил XAML более подробную информацию о проблеме. – TheMoonbeam

+0

ShadowRec и DataRec находятся за BackgroundRec. Поместите Rectangles в StackPanel, и вы увидите их. – SWilko

ответ

0

Проблема была вызвана переменными экземпляра. Удалив переменные экземпляра и изменив ShadowRec & DataRec в методе PropertyChangedCallback, проблема была решена. Для тех, кто имеет подобную проблему позже, он должен выглядеть примерно так:

private static void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) 
    { 
     GraphBar gb = sender as GraphBar; 
     // do something here, such as: gb.DataRec.Width = 15; 
    }