如何动态填充滑块并获得值
问题描述:
我有一个在XAML中声明的滑块,我希望根据用户的特定选择来填充值。一个页面是动态填充的,称为PhotoThumbnail的几个UserControl项目包含多个属性。一旦确定选择了哪个PhotoThumbnail,我想向用户显示一个滑块以调整某些属性。我已经在XAML中声明了单个滑块,并且我试图反复使用该滑块。根据用户的选择,滑块将填充不同的最小值和最大值,用户选择的最终值将应用于属性的某些设置。为了说明这一点,我有以下如何动态填充滑块并获得值
XAML
<Slider x:Name="sl" Visibility="Collapsed"/>
XAML.CS
void EditableEllipse_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
if (sender != null)
{
DependencyObject tappedElement = e.OriginalSource as UIElement;
// find parent UI element of type PhotoThumbnail
PhotoThumbnail i = this.FindParentOfType<PhotoThumbnail>(tappedElement);
if (i != null)
{
BuildControl(i);
}
p.IsOpen = true;
FilterPagePivot.IsHitTestVisible = false;
}
}
private void BuildControl(PhotoThumbnail p)
{
switch(p.NName)
{
case "1":
sl = new Slider
{
Minimum = 1,
Maximum = 256,
Visibility = System.Windows.Visibility.Visible
};
break;
case "2":
sl = new Slider
{
Minimum = 1,
Maximum = 10,
Visibility = System.Windows.Visibility.Visible
};
break;
...
}
}
主要是,在XAML滑块不采取新定义的属性,还可以是不可见的。注意我捕捉滑块的ValueChanged事件发生时的更改。
答
张贴的代码创建滑块的新实例 - 你应该使用现有的滑块实例而不是,即:
switch(p.NName)
{
case "1":
sl.Minimum = 1;
sl.Maximum = 256;
sl.Visibility = System.Windows.Visibility.Visible;
break;
注:我相信你应该把生成的XAML成员(即您可以通过参考它们的x:Name
属性如“sl”)为只读。
+0
这很好,但我第一次遇到Slider的问题。正在使用默认值并设置滑块属性从不在代码中执行,并直接跳转到ValueChanged事件。 http://*.com/questions/26829593/slider-not-dynamically-created-properly – Matthew 2014-11-09 15:22:23
为什么不只是将所有这些东西放入一个项目控件的项目控件,如itemscontrol,listbox,gridview,其中一个...?听起来比这条路线容易得多。 – 2014-11-04 20:34:13
你介意更详细的解释吗?我的视图设置的方式是我有一个WrapPanel是动态的在Loaded事件中使用PhotoThumbnail项目填充。这是一个PivotItem。在Pivot下,但在同一个Grid中,我定义了一个包含Slider的Popup,并且一旦用户选择了一个项目,我想根据项目选择填充ListPicker,并允许用户使用滑块更改设置每个ThumbnailItem都是独一无二的 – Matthew 2014-11-05 13:35:22