如何处理 UserControl 中属性的可见性?
How to handle visibilty of properties in an UserControl?
我尝试创建自定义 "TimePicker" - UserControl 并在代码设计上遇到一些困难。
在 UserControl 的 XAML 中,我创建了一个 ComboBox,它绑定到 List<int> HoursList
-属性。这将包含 0-23 之间的所有数字。我想创建一个 DependencyProperty Hour
以通过稍后在另一个 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 文件中使用控件,它将如下所示:
Test.xaml
<my:TimePicker Margin="2" />
我的问题是我可以在这里访问 HoursList-属性。但它应该仅用于加载控件中的默认值。稍后应该可以通过 DependencyProperty Hour
访问。所以我想隐藏 HoursList。
这里有一个我想禁止的例子:
<my:TimePicker Margin="2" HoursList="" />
也许我没有正确理解机制..任何建议都适用!
你可以根本不声明一个public 属性,而只是在后面的代码中分配ComboBox的ItemsSource:
<ComboBox x:Name="cbHours" .../>
代码:
public TimePicker()
{
InitializeComponent();
cbHours.ItemsSource = Enumerable.Range(0, 24);
}
我尝试创建自定义 "TimePicker" - UserControl 并在代码设计上遇到一些困难。
在 UserControl 的 XAML 中,我创建了一个 ComboBox,它绑定到 List<int> HoursList
-属性。这将包含 0-23 之间的所有数字。我想创建一个 DependencyProperty Hour
以通过稍后在另一个 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 文件中使用控件,它将如下所示:
Test.xaml
<my:TimePicker Margin="2" />
我的问题是我可以在这里访问 HoursList-属性。但它应该仅用于加载控件中的默认值。稍后应该可以通过 DependencyProperty Hour
访问。所以我想隐藏 HoursList。
这里有一个我想禁止的例子:
<my:TimePicker Margin="2" HoursList="" />
也许我没有正确理解机制..任何建议都适用!
你可以根本不声明一个public 属性,而只是在后面的代码中分配ComboBox的ItemsSource:
<ComboBox x:Name="cbHours" .../>
代码:
public TimePicker()
{
InitializeComponent();
cbHours.ItemsSource = Enumerable.Range(0, 24);
}