【问题标题】:Collection property is null. Custom control dependency properties集合属性为空。自定义控件依赖属性
【发布时间】:2016-01-31 18:44:18
【问题描述】:

我有一个自定义控件,我正在尝试扩展 Track 类。

public class MultiThumbTrack : Track
{tyMetadata(typeof(MultiThumbTrack)));
    }

    public List<Thumb> ThumbsList
    {
        get { return (List<Thumb>)GetValue(ThumbsListProperty); }
        set { SetValue(ThumbsListProperty, value); }
    }

                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <TickBar x:Name="TopTick" Fill="{TemplateBinding Foreground}" Height="4" Margin="0,0,0,2" Placement="Top" Grid.Row="0" Visibility="Collapsed"/>
                <TickBar x:Name="BottomTick" Fill="{TemplateBinding Foreground}" Height="4" Margin="0,2,0,0" Placement="Bottom" Grid.Row="2" Visibility="Collapsednd}" Height="4.0" Margin="5,0" Grid.Row="1" VerticalAlignment="center">
                    <Canvas Margin="-6,-1">
                        <Rectangle x:Name="PART_SelectionRange" Fill="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" Height="4.0" Visibility="Hidden"/>
                    </Canvas>
                </Border>
                <local:MultiThumbTrack x:Name="PART_Track" Grid.Row="1">
                    <local:MultiThumbTrack.DecreaseRepeatButton>
                        <RepeatButton Command="{x:Static Slider.DecreaseLarge}" Style="{StaticResource RepeatButtonTransparent}"/>
                    </local:MultiThumbTrack.DecreaseRepeatButton>
                    <local:MultiThumbTrack.IncreaseRepeatButton>
                        <RepeatButton Command="{x:Static Slider.IncreaseLarge}" Style="{StaticResource RepeatButtonTransparent}"/>
                    </local:MultiThumbTrack.IncreaseRepeatButton>
                    <!--<local:MultiThumbTrack.Thumb>
                        "Center" />
                    </local:MultiThumbTrack.Thumb>-->
                    <local:MultiThumbTrack.ThumbsList>
                        <Thumb Margin="1,15,0,0" x:Name="Thumb" Focusable="False" Height="13" Width="9" OverridesDefaultStyle="True" Template="{StaticResource SliderThumbHorizontalDefault}" VerticalAlignment="Center" />
                    </local:MultiThumbTrack.ThumbsList>
                </local:MultiThumbTrack>
            </Grid>
        </Border>
</ControlTemplate>

但它给了我“集合属性 'CustomCollectionControl.MultiThumbTrack'。'ThumbsList' 为空。”当我尝试这样做时出错:

<local:MultiThumb

【问题讨论】:

  • 在 MultiThumbTrack 构造函数中将 ThumbsList 属性初始化为 new List&lt;Thumb&gt;()。否则为null。可能很快有人会告诉你通过属性元数据设置依赖属性的默认值。不要那样做,因为同一个 List&lt;Thumb&gt; 实例将被所有控件实例使用。

标签: wpf xaml custom-controls dependency-properties


【解决方案1】:

在实例构造函数中初始化 ThumbsList 属性:

public class MultiThumbTrack : Track
{
    static MultiThumbTrack()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MultiThumbTrack), 
            new FrameworkPropertyMetadata(typeof(MultiThumbTrack)));
    }

    public MultiThumbTrack()
    {
        ThumbsList = new List<Thumb>();
    }

    ...
}

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2019-05-26
    相关资源
    最近更新 更多