Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问ItemsControl中的控件_C#_Wpf_Visual Studio 2010_Xaml - Fatal编程技术网

C# 访问ItemsControl中的控件

C# 访问ItemsControl中的控件,c#,wpf,visual-studio-2010,xaml,C#,Wpf,Visual Studio 2010,Xaml,我正在创建一个WPF应用程序。我想在每次点击按钮时都显示一个页面 <ItemsControl ItemsSource="{Binding Path=DashBoardApps}" VerticalAlignment="Bottom" HorizontalAlignment="Center" Name="Abc"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate>

我正在创建一个WPF应用程序。我想在每次点击按钮时都显示一个页面

 <ItemsControl ItemsSource="{Binding Path=DashBoardApps}" VerticalAlignment="Bottom" HorizontalAlignment="Center" Name="Abc">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Controls:FishEyeControl />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Button MouseDown="Button_MouseDown">
                            <Image  Source="{Binding Path=ApplicationImage}" Width="32" Height="32"/>
                        </Button>
                        <TextBlock x:Name="txtAppName" Text="{Binding Path=ApplicationName}" TextAlignment="Center" Visibility="Hidden" FontSize="7px" Foreground="#eff7ff" VerticalAlignment="Center"/>
                    </StackPanel>
                    <DataTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="txtAppName" Property="Visibility" Value="Visible" />
                        </Trigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
我想知道哪个按钮生成了事件。如中所示,如果单击了第一个按钮,则必须显示page1。因此,我尝试使用
GetItemAt()
函数查看是否单击了第一个按钮(以显示第一页)。但是它不起作用,我不确定这种方法是否正确

p.S简单地说,我想知道哪个按钮生成了事件,这可以使用索引来完成。如果是,怎么做?
请帮助

实际按钮在发送方参数中传递给事件处理程序:

Button button = sender as Button;
然而,有一个问题。由于Button处理MouseDown事件,您将无法获得它。您必须为事件添加处理程序,或者为按钮的事件添加更好的处理程序

还有一点需要注意的是:该方法使用一个从零开始的索引

编辑:以下是如何将按钮的
标记
属性绑定到ItemsControl的
AlternationalIndex
属性,以及如何在按钮的单击处理程序中使用该索引:

<ItemsControl ... AlternationCount="2147483647">
...
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Button Click="Button_Click"
                    Tag="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},
                                  Path=(ItemsControl.AlternationIndex)}">
            ...
        </StackPanel>
        ...
    </DataTemplate>
</ItemsControl.ItemTemplate>
private void Button_Click(object sender, RoutedEventArgs e)
{
    Button button = sender as Button;
    int index = (int)button.Tag;
    // get page by zero-based index
    ...
}
单击处理程序:

<ItemsControl ... AlternationCount="2147483647">
...
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Button Click="Button_Click"
                    Tag="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},
                                  Path=(ItemsControl.AlternationIndex)}">
            ...
        </StackPanel>
        ...
    </DataTemplate>
</ItemsControl.ItemTemplate>
private void Button_Click(object sender, RoutedEventArgs e)
{
    Button button = sender as Button;
    int index = (int)button.Tag;
    // get page by zero-based index
    ...
}

实际按钮在发送方参数中传递给事件处理程序:

Button button = sender as Button;
然而,有一个问题。由于Button处理MouseDown事件,您将无法获得它。您必须为事件添加处理程序,或者为按钮的事件添加更好的处理程序

还有一点需要注意的是:该方法使用一个从零开始的索引

编辑:以下是如何将按钮的
标记
属性绑定到ItemsControl的
AlternationalIndex
属性,以及如何在按钮的单击处理程序中使用该索引:

<ItemsControl ... AlternationCount="2147483647">
...
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Button Click="Button_Click"
                    Tag="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},
                                  Path=(ItemsControl.AlternationIndex)}">
            ...
        </StackPanel>
        ...
    </DataTemplate>
</ItemsControl.ItemTemplate>
private void Button_Click(object sender, RoutedEventArgs e)
{
    Button button = sender as Button;
    int index = (int)button.Tag;
    // get page by zero-based index
    ...
}
单击处理程序:

<ItemsControl ... AlternationCount="2147483647">
...
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Button Click="Button_Click"
                    Tag="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},
                                  Path=(ItemsControl.AlternationIndex)}">
            ...
        </StackPanel>
        ...
    </DataTemplate>
</ItemsControl.ItemTemplate>
private void Button_Click(object sender, RoutedEventArgs e)
{
    Button button = sender as Button;
    int index = (int)button.Tag;
    // get page by zero-based index
    ...
}

对我知道实际的按钮是作为发送者传递的。现在我想知道Button1是被点击的还是Button2被点击的。请注意,这里我使用的是ItemsControl。有没有可能用索引来做这件事?我如何找到它是第一个按钮还是其他按钮?当然,但你没有问这个问题。有关可能的解决方案,请参阅。例如,您可以将按钮的属性绑定到AlternationIndex,然后从单击处理程序访问index in标记。您可以演示如何执行此操作吗?我将
alternationandex
添加到按钮的标签中。如何访问单击处理程序中的索引?对不起,我是新来的。是的。我知道实际的按钮是作为发送者传递的。现在我想知道Button1是被点击的还是Button2被点击的。请注意,这里我使用的是ItemsControl。有没有可能用索引来做这件事?我如何找到它是第一个按钮还是其他按钮?当然,但你没有问这个问题。有关可能的解决方案,请参阅。例如,您可以将按钮的属性绑定到AlternationIndex,然后从单击处理程序访问index in标记。您可以演示如何执行此操作吗?我将
alternationandex
添加到按钮的标签中。如何访问单击处理程序中的索引?对不起,我是新手。