如何添加文本框搜索事件,项目或列表框在另一个wpf页面中

xqk2d5yq  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(131)

我想使搜索框一样,当我搜索项目,然后列表框显示在此页面。我有使列表框页面是在另一个wpf窗口。你能请帮助这方面我面临的maki问题。
当我搜索列表框项目从主窗口。xaml和点击按钮,然后项目显示在主页。和项目上看到软件页面。
谢谢你!

MainWindow.xaml

<Window Title="Welcome"  Background="#FFD6D6D6" WindowStyle="None" ResizeMode="NoResize"
WindowStartupLocation="CenterScreen" MouseDown="Window_MouseDown"
AllowsTransparency="True" Height="600" Width="1050">
 <!--Make serchbar -->
                <Grid Background="#2892b5" Grid.Column="3" Margin="10,0,0,0" >
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <Viewbox HorizontalAlignment="Left" Margin="22,4,0,0" VerticalAlignment="Center" Width="65">
                        <Image  Source="/Resources/search_32px.png" Height="40" Width="70" />
                    </Viewbox>
                    <Viewbox HorizontalAlignment="Center" Margin="70,4,0,0" VerticalAlignment="Center" >
                        <Label Content="Search for software" FontWeight="Bold" FontSize="20" Foreground="White"  Grid.Row="0"  Width="286"/>
                    </Viewbox>
                    <TextBox Background="White" Foreground="Black" x:Name="search" FontSize="20" Grid.Row="1" TextChanged="TextBox_TextChanged" Margin="37,0,36,38"/>
                    <Button Grid.Row="1" Height="37" Width="37" Background="Transparent" BorderBrush="Transparent" VerticalAlignment="Top" HorizontalAlignment="Right">
                        <Image Source="/View/icons8_right_50px_1.png"/>
                    </Button>

                </Grid>
    • 主窗口. xaml. cs**
private void SearchClick_Click(object sender, RoutedEventArgs e)
    { 

    }
    • 请参阅软件. xaml**
<Window Title="SeeSoftware" Height="700" Width="800" WindowStyle="None"  MouseDown="Window_MouseDown">

<ListBox x:Name="Listbox" Foreground="White" FontSize="15" BorderBrush="Transparent"  Background="Transparent">
                                <ListBoxItem Height="50">
                                    <StackPanel Orientation="Horizontal" Margin="20,0,0,0" HorizontalAlignment="Left">
                                        <Image Height="30" Width="30" Source="/Resources/vscode.jpeg"/>
                                        <Label VerticalAlignment="Center" Foreground="White" FontSize="18" Margin="20,0,0,0" Content="Visual Studio code" />
                                        <TextBlock Margin="18,0,0,0" FontSize="18" VerticalAlignment="Center" >
                                  <Hyperlink Foreground="White" NavigateUri="https://az764295.vo.msecnd.net/stable/6261075646f055b99068d3688932416f2346dd3b/VSCodeUserSetup-x64-1.73.1.exe" RequestNavigate="Hyperlink_RequestNavigate">
                                  Install
                                      <Image Height="13" Source="/Resources/icons8_download_26px.png"/>
                                  </Hyperlink>
                                        </TextBlock>
                                    </StackPanel>
                                </ListBoxItem>
</ListBox>
vwkv1x7d

vwkv1x7d1#

我给你举了个例子,希望我没理解错。
这是您的ListBox windows (或UserControl或任何您想要的)

<Grid>
    <ListBox x:Name="ListBox">
        <ListBoxItem>A</ListBoxItem>
        <ListBoxItem>B</ListBoxItem>
        <ListBoxItem>C</ListBoxItem>
        <ListBoxItem>D</ListBoxItem>
    </ListBox>
</Grid>

这是您的主窗口

<Window.Resources>
        <local:ListBoxControl x:Key="ListBoxControl"/>
        <local:StringToVisibilityConverter x:Key="StringToVisibilityConverter"/>
    </Window.Resources>

    <Grid>
        <StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBox x:Name="TextBox" Width="200" Height="20" Margin="5 0"/>
                <Button x:Name="Button" Content="Search" Click="Button_OnClick"/>
            </StackPanel>
            <TextBlock 
                x:Name="TextBlock" 
                Margin="8 10" 
                Visibility="{Binding RelativeSource={RelativeSource Self}, Path=Text, Converter={StaticResource StringToVisibilityConverter}}"/>
        </StackPanel>
    </Grid>

这是你的主窗口代码

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_OnClick(object sender, RoutedEventArgs e)
    {
        var listBoxControl = Resources["ListBoxControl"] as Control;
        var listBox = listBoxControl?.FindName("ListBox") as ListBox;
        if (listBox == null) return;
        var selectedItem = GetSelectedItem(listBox);
        TextBlock.Text = selectedItem != null ? (string)selectedItem.Content : string.Empty;
    }

    private ListBoxItem GetSelectedItem(ListBox listBox)
    {
        ListBoxItem selectedItem = null;
        foreach (var item in listBox.Items)
        {
            if (item is ListBoxItem listBoxItem && listBoxItem.Content is string s && s == TextBox.Text)
            {
                selectedItem = listBoxItem;
            }
        }

        return selectedItem;
    }
}

public class StringToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value is string str && !string.IsNullOrEmpty(str) && !string.IsNullOrWhiteSpace(str) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

试试看对你有没有好处

相关问题