从UWP中的DataTemplate生成的UI元素的事件处理

时间:2017-12-05 21:56:50

标签: c# uwp datatemplate

我很难找到如何响应按钮点击以外的任何事件(我可以使用Command来处理它们)。

如果从DataTemplate创建ToggleSwitch,我将如何生成“Toggled”事件?

1 个答案:

答案 0 :(得分:0)

取自Microsoft文档ToggleSwitch Class

<强> XAML:

 <StackPanel Orientation="Horizontal">
        <ToggleSwitch Header="Toggle Switch Example" 
            OffContent="Do work" OnContent="Working" 
            Toggled="ToggleSwitch_Toggled"/>  
        <ProgressRing x:Name="progress1"/>
    </StackPanel>

<强> 代码隐藏:

private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)
        {
            ToggleSwitch toggleSwitch = sender as ToggleSwitch;
            if (toggleSwitch != null)
            {
                if (toggleSwitch.IsOn == true)
                {
                    progress1.IsActive = true;
                    progress1.Visibility = Visibility.Visible;
                }
                else
                {
                    progress1.IsActive = false;
                    progress1.Visibility = Visibility.Collapsed;
                }
            }
        }

正如您在XAML中看到的那样,您定义了一个Toggled事件处理程序来处理其状态的变化。 事件处理程序在代码隐藏中自动创建,您可以将逻辑添加到它。

在这个例子中,您将发送方对象转换为ToggleSwitch,您知道它是引发此事件的对象的类型,并通过检查它的属性,您可以推断出例如Switch是否为On / Off,并处理正确地说,就像在上面的例子中一样。

使用事件动态生成ToggleSwitch:

让我们假设我们的客户是一个ObservableCollection属性,您已将其定义为页面的DataContext。根据它的大小,我们将在您的页面上显示相同数量的ToggleSwitch,并且所有这些都将重定向到 ToggleSwitch_Toggled

         <ListBox ItemsSource="{Binding customers}" Width="350" Margin="0,5,0,10">
            <ListBox.ItemTemplate>
                <DataTemplate>
                   <ToggleSwitch Header="Toggle Switch Example" 
                            OffContent="Do work" OnContent="Working" 
                            Toggled="ToggleSwitch_Toggled"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox> 

这是你在找什么?它可能不是最有用的实现,因为仍然没有实现的逻辑来理解动态创建的ToggleSwitch中哪个引发了事件(所有调用相同的事件处理程序)。

<强>行为:

enter image description here