Laden...

WPF: Gotfocus wird bei einer bestimmten Textbox nicht ausgeführt

Erstellt von marlem vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.979 Views
M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren
WPF: Gotfocus wird bei einer bestimmten Textbox nicht ausgeführt

Hallo,

ich habe folgende Textboxen:


 <TextBox Name="edtSuchen" BorderThickness="1" BorderBrush="Black" Width="150" ToolTip="Bitte Suchbegriff eingeben. Suche Starten mit der Enter-Taste" Focusable="True" KeyDown="edtSuchen_KeyPress" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" TabIndex="3"/>

<TextBox Name="edtErsetzen" BorderThickness="1" BorderBrush="Black" Width="150" ToolTip="Bitte Begriff eingeben, durch den der Suchbegriff ersetzt werden soll. Ersetzen Starten mit der Enter-Taste" KeyDown="edtErsetzen_KeyPress" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" TabIndex="4"/>

  <TextBox Name="TBXEditor" DockPanel.Dock="Top" MinWidth="525" MinHeight="240"  AcceptsReturn="True" FontSize="{Binding Path=SelectedValue.Content, ElementName=ComboboxFontsize}" FontFamily="{Binding Path=SelectedValue, ElementName=ComboboxFontname}" KeyboardNavigation.TabNavigation="Continue" KeyDown="TBXEditorBox_KeyDown" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" TabIndex="6" FocusManager.IsFocusScope="True">

Für alle drei Textboxen habe ich diese Ereignismethoden gecodet:


private void TextBox_GotFocus(Object sender, EventArgs e)
        {
            if (ChkBarrierefrei.IsChecked.Value == true) 
            (sender as TextBox).Background = AKTIVES_ELEMENT_CONTRAST;   
        }

        private void TextBox_LostFocus(Object sender, RoutedEventArgs e)
        {
            if (ChkBarrierefrei.IsChecked.Value == true)
                (sender as TextBox).Background = NICHTAKTIVES_ELEMENT_CONTRAST;
        }

Bei der Textbox **TBXEditor ** wird Gotfocus und LostFocus nicht ausgeführt.
Weiß jemand warum und was ich dagegen tun kann?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

4.942 Beiträge seit 2008
vor 5 Jahren

Könnte dies mit

KeyboardNavigation.TabNavigation="Continue"

zusammenhängen?

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Nein! Ich habe es gerade entfernt und es hat sich nichts geändert!

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

4.942 Beiträge seit 2008
vor 5 Jahren

Und

FocusManager.IsFocusScope="True"

?
Dies hatte ich dir ja in dem anderen Beitrag u.a. empfohlen, aber dadurch sollte ja LostFocus überflüssig sein (wobei der FocusManager selbst diese Ereignisse auch hat).

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

FocusManager.IsFocusScope="True"

Daran liegt es nicht!
Andere Idee:
kann es sein, dass es daran liegt, dass meine Textbox "TBXEditor" in keinem Extra Container ist?

Mein gesamter XAML-Code sieht so aus:


 <Grid>
        <DockPanel Name="Container">
            <Menu Name="Hauptmenu" DockPanel.Dock="Top" TabIndex="0">
                <MenuItem Header="_Datei">
                    <MenuItem Command="New" Header="_Neu" InputGestureText="Strg+N" />
                    <MenuItem Command="Open" Header="_Öffnen" InputGestureText="Strg+O" />
                    <MenuItem Command="Save" Header="_Speichern" InputGestureText="Strg+S" />
                    <MenuItem Header="Speichern _unter" Click="SaveFileAsMenuItem_Click" />
                    <Separator />
                    <MenuItem Command="Print" Header="_Drucken" InputGestureText="Strg+P" />
                    <Separator />
                    <MenuItem Header="_Ende" Click="EndeMenuItem_Click" />
                </MenuItem>
                <MenuItem Header="_Bearbeiten">
                    <MenuItem Command="Undo" Header="_Rückgängig" InputGestureText="Strg+Z" Click="undo_Click" />
                    <Separator />
                    <MenuItem Command="Cut" Header="_Ausschneiden" InputGestureText="Strg+X" Click="cut_Click" />
                    <MenuItem Command="Copy" Header="_Kopieren" InputGestureText="Strg+C" Click="copy_Click" />
                    <MenuItem Command="Paste" Header="_Einfügen" InputGestureText="Strg+V" Click="paste_Click" />
                    <Separator />
                    <MenuItem Header="Alles _markieren" InputGestureText="Strg+A" Click="selectAll_Click" />
                    <Separator />
                    <MenuItem Header="_Zeilenumbruch" Name="Zeilenumbruch" IsCheckable="True" Click="WrapLine_Click"  />
                </MenuItem>
                <MenuItem Header="_Hilfe">
                    <MenuItem Header="Hilfe _anzeigen" Click="Help_Click"/>
                    <MenuItem Header="_Info" Click="ProgrammInfo_Click"/>
                </MenuItem>
            </Menu>
            <ToolBarTray DockPanel.Dock="Top">
                <ToolBar VerticalAlignment="Top" KeyboardNavigation.TabNavigation="Continue">
                    <ComboBox  x:Name="ComboboxFontname" ToolTip="Auswahlliste um Schriftart festzulegen" SelectedIndex="0" Width="200" GotFocus="ComboBox_GotFocus" LostFocus="ComboBox_LostFocus" TabIndex="1" />
                    <ComboBox  x:Name="ComboboxFontsize" ToolTip="Auswahlliste um Schriftgröße festzulegen" SelectedIndex="0" Width="45" GotFocus="ComboBox_GotFocus" LostFocus="ComboBox_LostFocus" TabIndex="2">
                    <ComboBoxItem Content="12"/>
                    <ComboBoxItem Content="14"/>
                    <ComboBoxItem Content="16"/>
                    <ComboBoxItem Content="18"/>
                    <ComboBoxItem Content="20"/>
                    <ComboBoxItem Content="22"/>
                    <ComboBoxItem Content="24"/>
                    <ComboBoxItem Content="26"/>
                    <ComboBoxItem Content="28"/>
                    <ComboBoxItem Content="32"/>
                    <ComboBoxItem Content="36"/>
                    <ComboBoxItem Content="40"/>
                    </ComboBox>
                    <Label Name="lblSuchen" Content="_Suchen" Target="{Binding ElementName=edtSuchen}"/>
                    <TextBox Name="edtSuchen" BorderThickness="1" BorderBrush="Black" Width="150" ToolTip="Bitte Suchbegriff eingeben. Suche Starten mit der Enter-Taste" Focusable="True" KeyDown="edtSuchen_KeyPress" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" TabIndex="3"/>
                    <Label Name="lblErsetzen" Content="_Ersetzen"  Target="{Binding ElementName=edtErsetzen}"/>
                    <TextBox Name="edtErsetzen" BorderThickness="1" BorderBrush="Black" Width="150" ToolTip="Bitte Begriff eingeben, durch den der Suchbegriff ersetzt werden soll. Ersetzen Starten mit der Enter-Taste" KeyDown="edtErsetzen_KeyPress" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" TabIndex="4"/>
                    <Grid>
                        <CheckBox Name="ChkBarrierefrei" BorderThickness="1" Content="Editor ba_rrierefrei"   Margin="8" Click="ChkBarrierefrei_CheckedChanged" TabIndex="5" KeyDown="ChkBarrierefrei_KeyDown"/>
                    </Grid>
                </ToolBar>
            </ToolBarTray>
            <TextBox Name="TBXEditor" DockPanel.Dock="Top" MinWidth="525" MinHeight="240"  AcceptsReturn="True" FontSize="{Binding Path=SelectedValue.Content, ElementName=ComboboxFontsize}" FontFamily="{Binding Path=SelectedValue, ElementName=ComboboxFontname}"  KeyDown="TBXEditorBox_KeyDown" GotFocus="TextBox_GotFocus" FocusManager.IsFocusScope="True" TabIndex="6">
            </TextBox>
        </DockPanel>
    </Grid>

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

@Th69
Ich habe nochmal getestet.
Kann doch damit


FocusManager.IsFocusScope="True"

Zusammenhängen.

Weißt Du wie man das mit C# setzen kann?
Ich habe da eine Idee ...

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Danke!
Ich finde aber nur

FocusManager.SetFocusedElement

Weiß nicht ob das richtig ist.

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Hat Funktioniert.

Jetzt habe ich folgendes Problem:


 <TextBox Name="TBXEditor" DockPanel.Dock="Top" MinWidth="525" MinHeight="240"  AcceptsReturn="True" FontSize="{Binding Path=SelectedValue.Content, ElementName=ComboboxFontsize}" FontFamily="{Binding Path=SelectedValue, ElementName=ComboboxFontname}"  GotFocus="TextBox_GotFocus" LostFocus="TBXEditorBox_LostFokus" TabIndex="6">


private void TBXEditorBox_LostFokus(object sender, RoutedEventArgs e)
        {          
            if (ChkBarrierefrei.IsChecked.Value == true)
            {
                MessageBox.Show("Lostfocus:" + sender.ToString());
                TBXEditor.Background = NICHTAKTIVES_ELEMENT_CONTRAST;
                TBXEditor.BorderThickness = new Thickness(1);
            }
        }

TBXEditorBox_LostFokus wird erst ausgeführt wenn ich das Programmfenster schließe!

Woran kann das liegen?
Gibt es eine Alternative zum Ereignis LostFokus?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Ich habe es gelöst, es gibt noch ein anderes Ereignis als Lostfokus.

LostKeyboardFocus


 private void TextBoxLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            TextBox source = e.Source as TextBox;

            if (source != null)
            {
                source.Background = NICHTAKTIVES_ELEMENT_CONTRAST;
                source.Clear();
            }
        }

Das funktioniert zuverlässig!
Problem gelöst!

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java