簡體   English   中英

如何在WPF C#中顯示DataGrid按鈕上的彈出窗口?

[英]How to show a popup on datagrid button click in wpf c#?

我在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>

數據網格

<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;
        }

如果要使用公共彈出窗口,則最好在單獨的用戶控件中創建一個彈出窗口。然后單擊按鈕可以為該用戶控件創建一個新對象,然后使用該用戶控件對象打開該彈出窗口。彈出窗口將與上一次單擊按鈕無關。

請嘗試下一個解決方案; 將您的彈出窗口和按鈕組合到一個單獨的用戶控件中,這樣您就可以基於按鈕的單擊觸發彈出窗口的打開,並且對於每個按鈕單擊,都會在那里打開(按鈕)自己的彈出窗口。 當您將彈出窗口和按鈕組合在一起時,它們將具有相同的數據上下文,因此進行綁定沒有問題,另一方面,如果您希望這些控件具有不同的數據上下文,則可以為用戶提供兩個依賴屬性形式表示組合的用戶控件。

如果您的代碼有問題,我們將很樂意為您提供幫助,請讓我知道。 問候。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM