首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何取消DataTemplate中的复选框?

如何取消DataTemplate中的复选框?
EN

Stack Overflow用户
提问于 2018-05-04 08:29:19
回答 1查看 270关注 0票数 0

我在数据表中有4个复选框。在激活复选框时,我希望在其他三个复选框上设置IsChecked = false。由于使用了DataTemplate,我无法访问名称控件的使用。

使用发件人,我一次只能访问一个控件。但是我想关闭3个复选框并激活一个复选框。

这是我的模板:

代码语言:javascript
运行
复制
<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <StackPanel Orientation="Vertical" Margin="5" HorizontalAlignment="Right">
            <Metro:MetroSwitch Checked="chk_Checked" Tag="exc" Margin="0,2"  Name="chkExcelent">خیلی خوب</Metro:MetroSwitch>
            <Metro:MetroSwitch Checked="chk_Checked" Tag="good" Margin="0,2" Name="chkGood">خوب</Metro:MetroSwitch>
            <Metro:MetroSwitch Checked="chk_Checked" Tag="notbad" Margin="0,2" Name="chkNotBad">قابل قبول</Metro:MetroSwitch>
            <Metro:MetroSwitch Checked="chk_Checked" Tag="bad"  Name="chkBad">نیاز به تلاش بیشتر</Metro:MetroSwitch>
        </StackPanel>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

这是我的暗号:

代码语言:javascript
运行
复制
private void chk_Checked(object sender, RoutedEventArgs e)
{
    switch ((sender as Arthas.Controls.Metro.MetroSwitch).Tag.ToString())
    {
        case "exc": Console.WriteLine("exc"); break;
        case "good": Console.WriteLine("ggg"); break;
        case "notbad": Console.WriteLine("nb"); break;
        case "bad": Console.WriteLine("bad"); break;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-04 09:11:17

我没有您的代码和标记,所以我在一个更简单的视图中这样做了。

这使用的事实是,选中复选框是一个路由冒泡事件。

代码语言:javascript
运行
复制
<Grid>
    <StackPanel  ToggleButton.Checked="StackPanel_Checked">
        <CheckBox />
        <CheckBox />
        <CheckBox />
        <CheckBox />
    </StackPanel>
</Grid> 

代码语言:javascript
运行
复制
    private void StackPanel_Checked(object sender, RoutedEventArgs e)
    {
        CheckBox cb = e.OriginalSource as CheckBox;
        if(cb.IsChecked == false)
        {
            return;
        }
        foreach (var item in ((StackPanel)sender).Children)
        {
            if(item != cb)
            {
                ((CheckBox)item).IsChecked = false;
            }
        }
    }

请注意,当您更改其他复选框时,它们的事件将被触发,但处理程序将忽略那些设置为false的复选框。

您还必须避免更改用户刚刚签回的那个。

当你取消刚才检查的那个时,我并没有停止射击。

所以,你可以考虑一下这一点,而不是我分配给你的10分钟来回答你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50170518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档