【问题标题】:How to position WPF control next to the control with current focus?如何将 WPF 控件放置在具有当前焦点的控件旁边?
【发布时间】:2016-10-04 15:24:49
【问题描述】:

我有一个典型的edit form (user control),有几个输入框。 我需要一个ListBox,它必须显示在当前焦点的TextBox 正下方,因此它需要动态移动。 我尝试了一些绑定,但没有任何反应

<local:MyList x:Name="myList"
       Canvas.Left="{Binding (FocusManager.FocusedElement).Canvas.Left,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
       Canvas.Top="{Binding (FocusManager.FocusedElement).Canvas.Bottom,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
/>

【问题讨论】:

    标签: c# wpf wpf-positioning


    【解决方案1】:

    使用Popup,因为它可以让您方便地将其显示在您想要的位置。它的Placement = Bottom 将显示在PlacementTarget 的正下方。

    处理GotFocusLostFocusTextBox

            <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,19,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" GotFocus="TextBox_GotFocus_1" LostFocus="TextBox_LostFocus_1"/>
            <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,57,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" GotFocus="TextBox_GotFocus_1" LostFocus="TextBox_LostFocus_1"/>
            <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,96,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
            <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,136,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" GotFocus="TextBox_GotFocus_1" LostFocus="TextBox_LostFocus_1"/>
            <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="10,174,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    
            <Popup Placement="Bottom" x:Name="LsbPopup">
                <ListBox>
                    <ListBoxItem>item1</ListBoxItem>
                    <ListBoxItem>item1</ListBoxItem>
                    <ListBoxItem>item1</ListBoxItem>
                    <ListBoxItem>item1</ListBoxItem>
                    <ListBoxItem>item1</ListBoxItem>
                    <ListBoxItem>item1</ListBoxItem>
                    <ListBoxItem>item1</ListBoxItem>
                </ListBox>
            </Popup>
    

    处理程序:

    private void TextBox_GotFocus_1(object sender, RoutedEventArgs e)
    {
        LsbPopup.PlacementTarget = sender as TextBox;
        LsbPopup.IsOpen = true;
    }
    
    private void TextBox_LostFocus_1(object sender, RoutedEventArgs e)
    {
        LsbPopup.IsOpen = false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-06
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      相关资源
      最近更新 更多