WPF中的弹出窗口和ElementName

时间:2014-03-27 20:52:11

标签: c# wpf popup

我有带有ItemTemplate的ListBox,其中包含一个ToggleButton:

    <ListBox x:Name="lbInvoice" ItemsSource="{Binding ocItemsinInvoice}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <ToggleButton x:Name="btnInvoiceItem">
                    <StackPanel Orientation="Horizontal" Width="375">
                        <TextBlock Text="{Binding Item.ItemName}" Width="200"/>
                        <TextBlock Text="{Binding SalePrice}" Width="60"/>
                        <TextBlock Text="{Binding Quantity}" Width="40"/>
                        <TextBlock Text="{Binding Total}" FontWeight="Bold" TextAlignment="Center" Width="70"/>
                    </StackPanel>
                </ToggleButton>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

另外,我有弹出窗口,当我检查ToggleButton时,我希望这个弹出窗口打开,这是我的弹出代码:

        <Popup x:Name="popup" PopupAnimation="Fade" AllowsTransparency="True" PlacementTarget="{Binding ElementName=btnInvoiceItem}" StaysOpen="False">
            <Grid>
                <TextBlock Text="pla pla pla"></TextBlock>
            </Grid>
        </Popup>

我将btnInvoiceItem设置为Popup的ElementName,但弹出窗口不会出现在ToggleButton旁边:(

我想念的是什么?

提前致谢。

2 个答案:

答案 0 :(得分:2)

btnInvoiceItem仅存在于与您的集合中的项目对应的ListBoxItem的上下文中。因此,最简单的方法就是将Popup放在与按钮相同的DataTemplate中。

<DataTemplate>
    <StackPanel>
        <ToggleButton x:Name="btnInvoiceItem">
            <StackPanel Orientation="Horizontal" Width="375">
                <TextBlock Text="{Binding Item.ItemName}" Width="200"/>
                <TextBlock Text="{Binding SalePrice}" Width="60"/>
                <TextBlock Text="{Binding Quantity}" Width="40"/>
                <TextBlock Text="{Binding Total}" FontWeight="Bold" TextAlignment="Center" Width="70"/>
            </StackPanel>
        </ToggleButton>
        <Popup PopupAnimation="Fade" AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding ElementName=btnInvoiceItem, Path=IsChecked, Mode=TwoWay}">
            <Grid>
                <TextBlock Text="pla pla pla"></TextBlock>
            </Grid>
        </Popup>
    </StackPanel>
</DataTemplate>

答案 1 :(得分:0)

我认为你想做这样的事情:

<Popup IsOpen={Binding IsChecked, ElementName=btnInvoiceItem} x:Name="popup" PopupAnimation="Fade" AllowsTransparency="True" PlacementTarget="{Binding ElementName=btnInvoiceItem}" StaysOpen="False">
        <Grid>
            <TextBlock Text="pla pla pla"></TextBlock>
        </Grid>
    </Popup>
相关问题