Autor Beitrag
sworddancer
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 22.11.07 11:05 
Hallo zusammen,

ich stehe mal wieder vor einem Problem und weis nicht weiter.

Ich möchte in einem Formular die Eingaben über Textboxen machen. Die TextBoxen sollen dem benutzer aber nicht als solche angezeigt werden. Die Textbox ist in einem DataTemplate welches von einem Label verwendet wird.
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
 
<DataTemplate x:Key="BlubTemplate">
  <TextBox Text="{Binding Path=Blub, UpdateSourceTrigger=PropertyChanged}" SelectionLength="10" Width="50" Margin="0" Name="TextBlub" Foreground="#FF07B523" Background="black" BorderBrush="black"  GotFocus="ChangeBackgroundColor" LostFocus="ResetBackgroundColor" />
   <DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=Blub}" Value="0">
      <Setter Property="Foreground" Value="black" TargetName="TextBlub"/>
    </DataTrigger>
  </DataTemplate.Triggers>
</DataTemplate>

Das Label selbst ist in einem Border der Mehr Platz bietet als die TextBox einnimmt.
ausblenden XML-Daten
1:
<Border Width="123" Height="95.139" Canvas.Left="152" Canvas.Top="110.723" BorderBrush="#FFFEFCFC" BorderThickness="1,1,1,1" x:Name="BlubBorder" MouseDown="EnterBlubValue">					

Die Textbox selbst hat die gleiche Hintergrundfarbe und den gleichen BorderBrush wie der Border in welchem das Label ist. Jetzt möchte ich wenn ich irgendwoe auf den Border Clicke der TextBox den Focus geben. Dazu habe ich mich bei dem Border auf das Event MouseDown regestriert. Wenn diese Event auftritt möchte ich der TextBox den Focus geben. Dazu verwende ich folgenden Code
ausblenden C#-Quelltext
1:
2:
3:
4:
private void EnterBlubValue(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
  (TextBox)((DataTemplate)FindResource("BlubTemplate")).LoadContent()).Focus();
}

Wie oben bei dem DataTemplate beschrieben habe ich mich auch auf die beiden Events GotFocus und LostFocus regestriert.
ausblenden C#-Quelltext
1:
2:
3:
4:
((TextBox)e.OriginalSource).Background = Brushes.Gray;
((TextBox)e.OriginalSource).BorderBrush = Brushes.Gray;
if (((TextBox)e.OriginalSource).Name.Equals("TextBlub"))
  BlubBorder.Background = Brushes.Gray;

In der Got Focus funktion setzte ich die Hintergundfarbe des borders und der textbox auf Grau um dem Benutzer anzuzeigen das er dieses feld gerade editiert. Jetzt ist das interesante aber das ich durch die Funktion Focus ein event bekomme das die ListBox den Focus bekommt wenn ich diesen aber abrufe ist dieser auf false. Die Listbox ist auch nicht selektiert und ich kann nciht rein schreiben. Die Hintergrundfarbe des Borders ist Grau aber die der TextBox nicht. Das ganze Formular selbst ist in einem Tabcontrol und der Border ist in einem Canvas gespeichert. Ich hoffe jemand von euch kann mir bei diesem Problem helfen. Vielen dank schonmal im vorraus

MFG
sworddancer