‫欢迎回来｡
‫在本视频中, 我们将创建一个比萨饼浇头应用程序, 该应用程序允许我们在需要交付比萨饼时为比萨饼添加浇头｡
‫所以当我们点披萨的时候, 我们想加或者我们可以加意大利腊肠, 我们可以加蘑菇或者额外的马苏里拉奶酪｡
‫如果我们把它们全部加起来, 如您所见, 顶部的“全部加”按钮被激活, 它有三种状态,
‫如您所见, 它有“是”状态或“真”状态｡
‫然后它有一个空状态和一个假状态｡
‫好吧, 我会的
‫这就是我们要创造的东西｡
‫是的, 让我们继续｡
‫首先, 我们需要在这里获得更多空间, 我将使用“堆栈”面板而不是网格｡
‫同样, 正如你所看到的, 就像堆栈面板一样, 这只是因为如果你想拥有一些东西, 比如说,
‫相当基本的东西, 网格需要花费更多的精力来设置｡
‫这里我想有一个标签, 只有一小段文字, 字体粗细为heavy, 也就是粗体｡
‫因此, 它将具有粗体的权重｡
‫那我就叫它披萨浇头｡
‫接下来我需要一个复选框｡
‫因此, 我将创建一个新的复选框, 其名称为KB, 代表CheckBox
‫All Toppings, 并且该复选框将具有这三种状态｡
‫是的｡
‫这意味着它与其他复选框相关联｡
‫好吧, 我会的
‫所以它有三个状态, 这意味着它可以有三个不同的状态｡
‫所以一个是真的, 另一个是假的｡
‫最后一个是介于两者之间｡
‫所以它可以有第三种状态｡
‫这就是为什么我们有这三个州｡
‫是的｡
‫然后, 我们可以添加一个checked方法和一个unchecked方法｡
‫所以我将创建一个新的事件处理程序, 实际上我想手动完成｡
‫所以我将在这里创建自己的事件处理程序｡
‫所以让我们开始吧｡
‫您已经知道如何创建事件处理程序, 因此可以自己尝试｡
‫请继续并尝试创建事件处理程序｡
‫好了, 这一个是私人空间｡
‫CB全部选中, 更改, 所以这将只是复选框, 全部选中, 更改,
‫被调用, 这里我需要一个对象中心和一个根事件参数｡
‫我称之为E｡
‫这就是我希望在这个元素被选中后发生的奇迹｡
‫但现在我没有｡
‫因此, 我将选择所有已选中且已更改的CB｡
‫所以一旦对象被选中, 就会调用它, 然后会发生什么,
‫未选中的是, 它实际上就是我要调用的同一个方法.
‫因此, 我需要以特定的方式编写方法, 以便它可以同时适用于两种方式｡
‫好吧, 我会的
‫所以这里我也要用支票找零｡
‫作为一个文本, 它应该只是说一些像添加所有｡
‫如果我们转到这里, 我们可以看到这个比萨饼配料标签, 然后我们有这个复选框｡
‫现在这是我们更大的复选框｡
‫所以现在我想在它下面有一个堆栈面板, 它将有其他三个复选框｡
‫让我们创建一个新的Stack面板, 在这里, 我想让我的复选框有一个名字, 我将把它命名为CheckBox Salami｡
‫然后在此处添加checked属性, 并再次创建自己的事件｡
‫所以我把二等兵Void CB叫做单支票兑换.
‫它是一个对象, 我称它为发送者｡
‫最后我们把事件参数称为E, 这里没什么新的.
‫差不多一样的事｡
‫只是我们在这里改了名字｡
‫所以如果调用了上面的这个, 那么这个也应该调用｡
‫因此, 单击顶部的复选框时, 每次选中另一个复选框时都应调用另一个复选框｡
‫在这个堆栈面板中还有三个复选框, 如果其中一个被选中, 我就调用这个方法.
‫所以我把这个单次的checked叫做changed当它是checked的时候, 当它是unchecked的时候｡
‫是这样｡
‫CB Single已检查, 已更改｡
‫现在我们有了这个复选框｡
‫我还想在里面加一点文字｡
‫让我们继续, 在该复选框中添加一个文本, 这将是一个文本块｡
‫在文本块中, 我会添加一些像意大利腊肠这样的东西, 我为什么要这么做呢？
‫为什么我要这样做, 这样我就可以在里面创建一个文本块, 以及所有这些东西？
‫我为什么不直接添加内容呢？
‫那是因为我想在这里添加一些美丽的东西｡
‫我想添加一个前景, 这是阅读, 这将是粗体｡
‫所以字体粗细应该是粗体等于粗体｡
‫然后我想说一些像辣这样的东西, 所以你们可以看到, 萨拉米香肠现在是辣的｡
‫现在, 文本块正好位于add all的下方｡
‫好吧, 我会的
‫因此, 如果您想手动调整它并为其添加更多趣味, 则必须使用这种方法,
‫即在对象中创建对象, 或在控件中创建控件｡
‫所以一个文本块控件在checkbox控件内｡
‫但现在我将以一种相当简单的方式创建其他复选框｡
‫新复选框的名称为checkbox mush rooms, 实际上它将被选中｡
‫剩下的我们可以复制｡
‫所以我要过牌或复制｡
‫现在它还需要一个文本, 我就叫它蘑菇｡
‫现在我把这一行复制到这里, 粘贴到这里, 它就有了一个不同的名字,
‫叫做马苏里拉奶酪.
‫多加的马苏里拉奶酪｡
‫或者我们就叫它马苏里拉奶酪｡
‫马苏里拉奶酪
‫好吧, 我会的
‫当然, 文字也应该改为马苏里拉奶酪｡
‫现在我不喜欢的是, 这四个人都是一个接一个地堆叠在一起的,
‫而我却不知道这会把所有的人都加起来｡
‫因为如果我们只是在这里创造一点利润, 它就会看起来非常不同｡
‫比如说5个像素或者10个像素, 就像你现在看到的, 它有一个空白｡
‫这里离“全部添加”还有一点距离, 现在看起来所有这些都属于“全部添加”复选框｡
‫这很酷｡
‫这正是我想要的｡
‫好吧, 我会的
‫现在我们的XAML文件已经设置好了｡
‫我们来看看后面的代码并实现这些方法, 因为我们已经对它们进行了赋值或声明, 但那里还没有发生任何事情,
‫我们可以改变它｡
‫如果我们想继续添加公牛, 新的瓦尔, 新的val会是好的, 它会是CB的结果,
‫所有浇头点都被选中｡
‫所以如果这是真的, 如果这个陈述是真的, 那么新的值也是真的｡
‫否则就是假的｡
‫现在我想设置的是我的意大利腊肠被选中｡
‫我想将其设置为新卷｡
‫蘑菇和马苏里拉奶酪也是一样｡
‫所以过牌了｡
‫这将是新的卷和cb cb蘑菇是检查这个新的卷｡
‫那我们为什么需要新墙呢？
‫如果勾选了所有配料, new vol会将其设置为true或false｡
‫所以如果有人按下所有的配料, 那么这里就有一个, 那么它们要么全部被激活, 要么全部被停用｡
‫这就是我用这个方法创造的｡
‫现在, 下一个是我们的单勾换了｡
‫在这里, 我想将选中得ES设置为NULL, 因为如果选中其中一个, 则它要么是活动得, 要么是非活动得.
‫所以所有的浇头通常都应该去活化｡
‫如果我们检查除两个之外的一个被激活, 并且我们激活第三个, 那么所有的都应该被激活｡
‫所以在这里我们只检查cb salami是否被检查为真, 以及KB mozzarella是否被检查为真｡
‫是查了是真的｡
‫而最后, 如果CV蘑菇这一查属实｡
‫当然, 我们需要另一个环绕的支架, 这样我们就可以在这里做任何我们想做的事情｡
‫我只想说所有配料都检查过了｡
‫应该是真的｡
‫所以如果所有的都检查了, 那么蘑菇马苏里拉奶酪等等, 如果这些都检查了, 那么啊,
‫所有的浇头也应该检查｡
‫如果它们都是假的, 那么它应该被停用｡
‫所以我把它复制到这里, 然后把所有的true替换成false, 因为它是双向的, 对吗？
‫因此, 在这两种情况下, 要么全部激活, 要么全部停用｡
‫我想设置我的复选框所有浇头正确｡
‫好吧, 我会的
‫所以现在我们可以运行这个, 我们是在所有｡
‫我们点击它, 所有的都被激活了｡
‫如果我再次点击, 这就是我所说的三态｡
‫那么这是我们在哪里呢？
‫复选框？
‫是三个境界｡
‫是的, 在那里｡
‫那如果我去激活一个辣蘑菇｡
‫好吧, 如果我停用所有, 如你所见, 我将进入停用模式｡
‫如果我加上一些, 加上所有的, 就会变成三态或三态｡
‫差不多吧｡
‫好吧, 我会的
‫如你所见, 非常简单｡
‫这是如何使用复选框｡
‫顺便说一句, 你不必像我在这里做的那样, 用同样的方法｡
‫你本可以为他们所有人创造非常独特的方法｡
‫您可以创建一个消息框来通知用户某些信息｡
‫是的, 请｡
‫是的, 我知道
‫请不要忘记勾选此选项或类似“感谢您勾选此复选框”的内容, 因为我们非常感谢您的反馈或您能想到的任何内容｡
‫好吧, 太好了｡
‫这是复选框, 在下一个视频中, 我们将继续下一个主题｡
‫那到时见｡