繁体   English   中英

将“开关”从Windows窗体更改为WPF

[英]Changing a “switch” from windows form to WPF

昨天我们弄清楚了如何获取列表框的内容,以便在我堆叠在一起的不同面板之间切换。 这次我试图在WPF中执行相同的操作,显然语法是不同的。 该代码在Windows窗体中可以100%正确地工作。 我尝试了几种不同的方法来尝试显示现在的“网格”,但无济于事。
提前致谢!

当前代码“尝试”。 我只是展示了几种尝试在第一个“案例”中更改代码的方法。

    private void listBox1_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
    {

        // set the listboxselected item to a string variable
        string curItem = listBox1.SelectedItem.ToString();
        curItem = listBox1.SelectedItem.ToString();

        // variable changes depening on mouse click, sets to whichever string value is selected
        switch (curItem)
        {
            case "General":
                gridGeneral.Visibility == true;
                gridRightClick.Visibility = Visibility.Visible;
                gridSnaps.Visibility = Visibility.Hidden;
                break;
            case "E-Snaps":
                gridGeneral.Visibility = Visibility.Hidden;
                gridRightClick.Visibility = Visibility.Hidden;
                gridSnaps.Visibility = Visibility.Visible;
                break;
            case "Mouse":
                gridGeneral.Visibility = Visibility.Hidden;
                gridRightClick.Visibility = Visibility.Visible;
                gridSnaps.Visibility = Visibility.Hidden;
                break;

        }

这是在Windows窗体中工作的代码

私人无效listBox1_SelectedIndexChanged(对象发送者,System.EventArgs e){

           // set the listboxselected item to a string variable
           string curItem = listBox1.SelectedItem.ToString();
           curItem = listBox1.SelectedItem.ToString();

           // variable changes depening on mouse click, sets to whichever string value is selected
           switch(curItem)
        {
               case "General" :
            panel1.Visible = false;
            panel2.Visible = true;
            panel3.Visible = false;
            panel4.Visible = false;
            panel5.Visible = false;
            break;

等等等等...

在WPF中,您不会以与WinForms中相同的方式进行操作

在WPF中,您可能在WPF中只有一个控件,而在WinForms中您只有3个控件,并且控件用于呈现的模板将根据ListBox的SelectedItem进行更改

控件定义很可能看起来像这样,以便其内容绑定到ListBox.SelectedItem

<ContentControl Content="{Binding ElementName=listBox1, Path=SelectedItem}" />

您可以使用ContentTemplatesDataTemplates告诉WPF如何绘制ContentControl的ContentTemplate。

如果SelectedItem是自定义类,则DataTemplate可能会更容易,但是由于在示例中为String,因此ContentTemplate可能更好。

这是该ContentControl的样式示例,该样式根据Content的值更改ContentTemplate属性

 <Style TargetType="{x:Type ContentControl}">
    <!-- // Default Template -->
    <Setter Property="ContentTemplate" Value="{StaticResource GeneralTemplate}" />

    <!-- // Change template depending on a property -->
     <Style.Triggers>
         <Trigger Property="Content" Value="ESnaps">
             <Setter Property="ContentTemplate" Value="{StaticResource ESnapsTemplate}" />
         </Trigger>
         <Trigger Property="Content" Value="Mouse">
             <Setter Property="ContentTemplate" Value="{StaticResource MouseTemplate}" />
         </Trigger>
     </Style.Triggers>
 </Style>

(我可能具有您在这里需要错误的确切绑定的语法……可能需要进行一些测试)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM