如何处理用户控件中属性的可见性?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何处理用户控件中属性的可见性?相关的知识,希望对你有一定的参考价值。
我尝试创建一个自定义的“TimePicker” - UserControl并且在代码设计上有点挣扎。
在UserControl的XAML中,我创建了一个ComboBox,它绑定到List<int> HoursList
属性。这将包含0-23之间的所有数字。我想创建一个DependencyProperty Hour
,以便稍后通过Binding在另一个XAML文件中跟踪所选的ComboBox项。
TimePicker.xaml
<Grid>
<!--Hours-->
<ComboBox Grid.Column="0" ScrollViewer.CanContentScroll="False"
ItemsSource="{Binding HoursList,RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
SelectedIndex="0" ItemStringFormat="{}{0:00}">
</ComboBox>
</Grid>
TimePicker.xaml.cs
public partial class TimePicker : UserControl
{
private List<int> hoursList;
public readonly List<int> HoursList
{
get
{
if (this.hoursList == null)
LoadHoursList();
return hoursList;
}
}
public TimePicker()
{
InitializeComponent();
}
/// <summary>
/// will create a new List<int> and fill it from 0-23 (int) representing the hours
/// </summary>
private void LoadHoursList()
{
this.hoursList = new List<int>();
for (int i = 0; i < 24; i++)
this.HoursList.Add(i);
}
}
如果我现在在另一个XAML文件中使用Control,它将如下所示:
Test.xaml
<my:TimePicker Margin="2" />
我的问题是我可以在这里访问HoursList-Property。但它应该用于仅加载控件中的默认值。应该可以在以后使用DependencyProperty Hour
进行访问。所以我想隐藏HoursList。
这是一个我想要禁止的例子:
<my:TimePicker Margin="2" HoursList="" />
也许我没有正确理解机制..任何建议表示赞赏!
答案
您可能根本不会声明公共属性,只需在代码后面分配ComboBox的ItemsSource:
<ComboBox x:Name="cbHours" .../>
码:
public TimePicker()
{
InitializeComponent();
cbHours.ItemsSource = Enumerable.Range(0, 24);
}
以上是关于如何处理用户控件中属性的可见性?的主要内容,如果未能解决你的问题,请参考以下文章
“私有”可见性修饰符 - 将 C# 转换为 VB 时如何处理差异?