【问题标题】:How to Dynamically Populate Slider and Get Value如何动态填充滑块并获取值
【发布时间】:2014-12-31 18:31:49
【问题描述】:

我有一个在 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 事件中发生的变化。

【问题讨论】:

  • 为什么不把所有这些东西都变成一个itemstemplate,用于基于itemscontrol的控件之一,比如itemscontrol、listbox、gridview等等......?听起来比这条路线容易得多。
  • 您介意再详细解释一下吗?我的视图设置方式是我有一个 WrapPanel,它在 Loaded 事件中动态填充 PhotoThumbnail 项目。这是在 PivotItem 内。在 Pivot 下,但在同一个 Grid 中,我定义了一个包含 Slider 的 Popup,一旦用户选择了一个项目,我想根据项目选择填充 ListPicker 并允许用户使用滑块来更改设置,即每个 ThumbnailItem 独有

标签: c# xaml windows-phone-8


【解决方案1】:

发布的代码创建了 Slider 的新实例——您应该改用现有的 Slider 实例,即:

 switch(p.NName)
    {
        case "1":
            sl.Minimum = 1;
            sl.Maximum = 256;
            sl.Visibility = System.Windows.Visibility.Visible;
            break;

注意:我认为您应该将生成的 XAML 成员(您通过 x:Name 属性引用的那些成员,如“sl”)视为只读的。

【讨论】:

  • 这很好用,但我在第一次填充滑块时遇到了问题。使用默认值并且设置滑块属性永远不会在代码中执行,而是直接跳转到 ValueChanged 事件。 stackoverflow.com/questions/26829593/…
猜你喜欢
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2021-09-19
  • 2019-09-26
相关资源
最近更新 更多