У меня есть прикрепленное свойство, объявленное для моей пользовательской панели как:
public static readonly DependencyProperty WeightProperty = DependencyProperty.RegisterAttached(
"Weight", typeof(double), typeof(WeightedPanel),
new FrameworkPropertyMetadata(1.0,
FrameworkPropertyMetadataOptions.AffectsParentMeasure |
FrameworkPropertyMetadataOptions.AffectsParentArrange ));
public static void SetWeight(DependencyObject obj, double weight)
{
obj.SetValue(WeightProperty, weight);
}
public static double GetWeight(DependencyObject obj)
{
return (double) obj.GetValue(WeightProperty);
}
Работает нормально, если я определю панель как:
<local:WeightedPanel Grid.Row="0" Height="200">
<Button local:WeightedPanel.Weight="8" />
<Button local:WeightedPanel.Weight="2"/>
</local:WeightedPanel>
Но если я использую эту панель как ItemsPanelTemplate
для ListBox
, она всегда возвращает значение по умолчанию в ArrangeOverride
.
<ListBox Grid.Row="2" Height="100">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<local:WeightedPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<Button local:WeightedPanel.Weight ="6" />
<Button local:WeightedPanel.Weight ="4"/>
</ListBox>
Я также заметил, что когда пользовательская панель переноса используется в ListBox
, она отправляет double.PositiveInfinite
в методе Arrange и, следовательно, Arrange никогда не может установить значения. То же самое отлично работает, когда все используется само по себе
Спасибо