如何在wpf c#中显示数据网格按钮上的弹出窗口?

时间:2016-01-21 04:34:17

标签: c# wpf datagrid popup

我的wpf窗口中有一个常见的弹出窗口,我在datagrid中也有一个按钮。我想要的是在单击按钮时打开弹出窗口。弹出窗口应独立于每个按钮单击。例如,让我们说数据网格中有两行。当我点击第一个按钮弹出窗口时,我会对弹出窗口进行一些更改并关闭它。现在我点击第二个按钮,它应该打开一个新的弹出窗口,而不是我之前做的更改。我正在使用一个常见的弹出窗口。请有人告诉我是否可以通过常见的弹出窗口来处理我的要求?

XAML

<Popup x:Name="popUpServer" IsOpen="False" Placement="MousePoint" >
                        <Border Background="#FFEFF2F3" BorderBrush="Black" BorderThickness="1" Width="229" Height="145">
                            <StackPanel  Orientation="Horizontal" Margin="0,0,0,-17">
                                <Grid Width="227" Margin="0,0,0,10">
                                    <GroupBox Header="Configuration" HorizontalAlignment="Left" Margin="9,6,-9,0" VerticalAlignment="Top" Height="125" Width="211">
                                        <Grid>
                                            <Label Content="Auto Restart" HorizontalAlignment="Left" Margin="10,6,0,0" VerticalAlignment="Top"/>
                                            <ToggleSwitch:HorizontalToggleSwitch  x:Name="tsAutoRestart" HorizontalAlignment="Left" Margin="97,10,0,0" VerticalAlignment="Top" Width="46" ThumbSize="22" Height="21" RenderTransformOrigin="3.522,1.048">
                                                <ToggleSwitch:HorizontalToggleSwitch.UncheckedBackground>
                                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                        <GradientStop Color="#FFC80000" Offset="1"/>
                                                        <GradientStop Color="#FF0A0A0A" Offset="0.853"/>
                                                    </LinearGradientBrush>
                                                </ToggleSwitch:HorizontalToggleSwitch.UncheckedBackground>
                                                <ToggleSwitch:HorizontalToggleSwitch.CheckedBackground>
                                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                        <GradientStop Color="#000000" />
                                                        <GradientStop Color="#000000" Offset="1" />
                                                    </LinearGradientBrush>
                                                </ToggleSwitch:HorizontalToggleSwitch.CheckedBackground>
                                                <ToggleSwitch:HorizontalToggleSwitch.ThumbBrush>
                                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                        <GradientStop Color="#FFD6D4D4" />
                                                        <GradientStop Color="#FFD6D4D4" Offset="1" />
                                                        <GradientStop Color="#FFD6D4D4" Offset="0.02" />
                                                    </LinearGradientBrush>
                                                </ToggleSwitch:HorizontalToggleSwitch.ThumbBrush>
                                            </ToggleSwitch:HorizontalToggleSwitch>
                                            <ComboBox x:Name="cbDuration" HorizontalAlignment="Left" VerticalAlignment="Top" Width="92" Margin="97,40,0,0">
                                                <ComboBoxItem Content="30 Minutes"/>
                                                <ComboBoxItem Content="1 Hours"/>
                                                <ComboBoxItem Content="2 Hours"/>
                                            </ComboBox>
                                            <Label Content="After" HorizontalAlignment="Left" VerticalAlignment="Top" Width="83" Margin="9,36,0,0"/>
                                            <Button x:Name="btnApply" Content="Apply" HorizontalAlignment="Left" Margin="125,75,0,0" VerticalAlignment="Top" Width="64" Click="BtnApply_Click"/>
                                        </Grid>
                                    </GroupBox>

                                </Grid>
                            </StackPanel>
                        </Border>
                    </Popup>

的Datagrid

<DataGridTemplateColumn>
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <StackPanel>
                                                <Button x:Name="txtServerInfo" Click="TxtServerInfo_Click" Height="23" Width="28">
                                                    <Button.Background>
                                                        <ImageBrush ImageSource="img.png"/>
                                                    </Button.Background>
                                                </Button>
                                            </StackPanel>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

代码隐藏文件

 private void TxtServerInfo_Click(object sender, RoutedEventArgs e)
        {
            popUpServer.IsOpen = true;
        }

2 个答案:

答案 0 :(得分:0)

如果要使用常用弹出窗口,则可以更好地在单独的用户控件中创建弹出窗口。然后,对于按钮单击,您可以为用户控件创建新对象,然后使用用户控件对象打开弹出窗口。然后弹出窗口中的值将独立于上一次按钮单击。

答案 1 :(得分:0)

请尝试下一个解决方案;将弹出窗口和按钮组合成一个单独的用户控件,这样您就可以根据按钮单击触发弹出窗口,对于每个按钮单击,它将在那里打开它自己的弹出窗口。当您将弹出窗口和按钮组合在一起时,它们将具有相同的数据上下文,因此您可以毫无问题地进行绑定,另一方面,如果您希望为这些控件提供不同的数据上下文,则可以支持具有两个依赖关系的用户属性形成组合的用户控件。

如果您对代码有疑问,我很乐意提供帮助,请告诉我。 问候。