Динамическое изменение элементов управления нажатием wpf - PullRequest
0 голосов
/ 11 марта 2019

Я хочу реализовать определенное поведение в WPF.Я долго искал вокруг и решил разобраться в помощи.Я хочу добиться следующего поведения.

У меня TextBlock и ComboBox лежат друг на друге.Я хочу, чтобы ComboBox появлялся, когда TextBlock находится в фокусе.Также, как только работы с ComboBox будут завершены (например, выбрано ComboBoxItem).Я хочу вернуться к своему старому виду (то есть TextBlock сверху).Кто-нибудь может показать образец этого поведения или просто наставить меня чем-нибудь.

У меня есть метод ZIndex, который я попробовал, как показано ниже.

<Grid>  
    <Button Name="Button1" Canvas.ZIndex="4" Content="Button1" Canvas.Top="100" Width="163" Height="58" FontSize="26" Click="Button1_Click" />  
    <Button Name="Button2" Canvas.ZIndex="3" Content="Button2" Canvas.Top="100" Canvas.Left="130" Width="163" Height="58" FontSize="26" Click="Button2_Click"  />
</Grid>

И код

private void Button1_Click(object sender, RoutedEventArgs e)
{
    Canvas.SetZIndex(sender as UIElement, 1);
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
    Canvas.SetZIndex(sender as UIElement, 0);
}

1 Ответ

1 голос
/ 11 марта 2019

Не уверен, правильно ли я правильно понимаю ваши потребности, но я думаю, что вы этого хотите:

XAML:

        <Grid Width="50">
            <ComboBox x:Name="cb" SelectedIndex="0" ItemsSource="{Binding MyObservableCollection}"/>
            <TextBox x:Name="tb" Text="{Binding ElementName=cb,Path=SelectedItem}">
                <TextBox.Style>
                    <Style TargetType="TextBox">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=tb, Path=IsFocused}" Value="true">
                                <Setter Property="Visibility" Value="Hidden"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBox.Style>
            </TextBox>
        </Grid>

DataContext:

    private ObservableCollection<string> myObservableCollection = new ObservableCollection<string>{ "one", "two", "tree" };

    public ObservableCollection<string> MyObservableCollection
    {
        get => this.myObservableCollection;
        set => SetField(ref this.myObservableCollection, value);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...