Hallo zusammen,
wie kann man bei Coded UI Test die Controls einer Listbox, die über Datatemplate gesetzt wurden eindeutig identifizieren?
<ListBox Name="_listBox">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type TestTesting:StringValue}">
<ContentControl Content="{Binding}" Margin="3,0,3,5">
<ContentControl.Resources>
<DataTemplate x:Key="TypeOne">
<Border BorderBrush="Red" BorderThickness="1">
<TestTesting:TextBoxTextTastatur x:Name="_txt" Text="{Binding Value}" AutomationProperties.HelpText="{Binding Nr}"/>
</Border>
</DataTemplate>
<DataTemplate x:Key="TypeTwo">
<Border BorderBrush="Aqua" BorderThickness="1">
<TestTesting:TextBoxTextTastatur x:Name="_txt" Text="{Binding Value}" AutomationProperties.HelpText="{Binding Nr}"/>
</Border>
</DataTemplate>
<DataTemplate x:Key="TypeThree">
<Border BorderBrush="Purple" BorderThickness="1">
<TestTesting:TextBoxTextTastatur x:Name="_txt" Text="{Binding Value}" AutomationProperties.HelpText="{Binding Nr}"/>
</Border>
</DataTemplate>
</ContentControl.Resources>
<ContentControl.ContentTemplate>
<DataTemplate DataType="{x:Type TestTesting:StringValue}">
<ContentControl Name="cp" Content="{Binding}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Nr}" Value="1">
<Setter TargetName="cp" Property="ContentTemplate" Value="{StaticResource TypeOne}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Nr}" Value="2">
<Setter TargetName="cp" Property="ContentTemplate" Value="{StaticResource TypeTwo}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Nr}" Value="3">
<Setter TargetName="cp" Property="ContentTemplate" Value="{StaticResource TypeThree}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Das widerspricht sich,wenn du Eine Listbox hast hättest du die benannten elemente mehrfach wodurch diese ihre eindeutigkeit verlieren. du kannst höchstens auf die visualchildren als array zugreifen.
[edit: Es sei denn du willst nur innerhalb deines Listboxitems darauf zugreifen, dann geht das wie immer über x:Name
Vielen Dank für die Antwort.
Folgender Code sollte die TextBox innerhalb des ListBoxItems zurückgeben:
public WpfEdit UIItemEdit
{
get
{
if ((this.mUIItemEdit == null))
{
this.mUIItemEdit = new WpfEdit(this);
#region Suchkriterien
this.mUIItemEdit.SearchProperties[WpfListItem.PropertyNames.HelpText] = "2";
this.mUIItemEdit.WindowTitles.Add("MainWindow");
#endregion
}
return this.mUIItemEdit;
}
}
Allerdings bekomme ich bei keiner TextBox AutomationProperties.HelpText zurück bzw. ist immer leer.
Leitet WpfEdit von TExtbox ab oder warum erwartesrt du eine Textbox?
Der Grundcode wurde von Generator erstellt. Allerdings wurde beim ausführen immer die gleiche TextBox beschrieben. jetzt such ich einen Weg diese unterschiedlichen TextBoxen zu identifizieren
Erstell dir eine custom Property und häng die an deien tetxboxen dran z.B eine nummerierung
//namespace BliBlaBlub
public static class MyAttachedProps
{
public static readonly DependencyProperty InternalKeyProperty =
DependencyProperty.RegisterAttached("InternalKey", typeof(String), typeof(MyAttachedProps));
public static String GetInternalKey(DependencyObject obj) { return (String)obj.GetValue(InternalKeyProperty ); }
public static void SetInternalKey(DependencyObject obj, String value) { obj.SetValue(InternalKeyProperty Property, value); }
}
<Window x:Class="BliBlaBlub.MyClass"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:AttachedKey="clr-namespace:BliBlaBlub.MyAttachedProps">
<ListView>
.
.
<ItemTemplate>
<TextBox AttachedKey:InternalKey="Key1" />
<TextBox AttachedKey:InternalKey="Key2" />
<TextBox AttachedKey:InternalKey="Key3" />
<ListView>
</ItemTemplate>
</Window>
und dann kannst du deine TextBoxen über "BliBlaBlub.MyAttachedProps.GetInternalKey(textbox)" unterscheiden
Natürlich wider widerholt sich der Key dann pro Item in deiner ListView immerwider