Forums Neueste Beiträge
 

Immer noch das Problem mit DataTemplate

17/05/2008 - 09:50 von Jürgen Himmel | Report spam
Hallo,

ich komme immer noch nicht weiter mit meinem Problem. Entweder ich stehe
total auf dem Schlauch oder habe den ganz falschen Ansatz.

Ich versuche immer noch ein Element eines DataTemplates in einer
WPF-Applikation zu erreichen. Das DataTemplate selbst konnte ich
ansprechen (Siehe unten bei "private void NeuerTab(object sender,
RoutedEventArgs e)".

Ich schaffe es aber immer noch nicht z. B. das Element ComboBox (z. B.
das mit dem Namen "Verzeichniselement") innerhalb des DataTemplates
anzusprechen. Die Internetseite

http://msdn.microsoft.com/en-us/lib...13579.aspx

hat mir nicht weitergeholfen, auch die anderen über Google gefundenen
Seiten waren nicht lösungsführend.

Mache ich grundsàtzlich irgendetwas falsch, habe ich den falschen
Denkansatz? Jeder Versuch im Event-Handling z. B. von "private void
Verzeichniswahl_ContextMenuOpening(object sender, ContextMenuEventArgs
e)" führt entweder zu vielen Fehlern oder das Projekt compiliert, ohne
dass irgendein Wert im ComboBox-Element steht.

Hier die beiden vollstàndigen Dateien, um die es geht:

Hier die WPF-Datei:


<Window x:Class="AlphaXOmega.Window1"
xmlns="http://schemas.microsoft.com/winfx/...tion"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="AlphaXOmega" WindowState="Maximized" WindowStyle="ThreeDBorderWindow">
<Window.Resources>
<DataTemplate x:Key="TabItemTemplate">
<Grid Background="AliceBlue">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderThickness="1" BorderBrush="Blue">
<StackPanel Grid.Column="0">
<TextBlock TextAlignment="Center" FontSize="30">XML-Eingabe</TextBlock>
<Label>Ausgewàhlte XML-, DTD- oder Schema-Datei:</Label>
<Grid>
<ComboBox Name="Verzeichniswahl" HorizontalAlignment="Center" MaxWidth="400" Width="400" ContextMenuOpening="Verzeichniswahl_ContextMenuOpening">
</ComboBox>
</Grid>
<Grid>
<TreeView Name="Dateisuche" HorizontalAlignment="Center" MaxWidth="400" Width="400" MinHeight="200" Height="250" Loaded="Dateisuche_Loaded"/>
</Grid>
<Label/>
<Label/>
<Label/>
<Label/>
<Label>Inhalt der ausgewàhlten Datei:</Label>
<Grid>
<TreeView Name="Dateianzeige" HorizontalAlignment="Center" MaxWidth="400" Width="400" MaxHeight="500" Height="250" Loaded="Dateianzeige_Loaded"></TreeView>
</Grid>
</StackPanel>
</Border>
<Border Grid.Column="1" BorderThickness="1" BorderBrush="Blue">
<StackPanel Grid.Column="1">
<TextBlock TextAlignment="Center" FontSize="30">Design</TextBlock>
<Label>Ausgabe in das folgende Format:</Label>
<Label/>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<RadioButton Grid.Column="0" GroupName="Ausgabeformat" Name="PDFAusgabe" HorizontalAlignment="Center" IsChecked="True">PDF</RadioButton>
<RadioButton Grid.Column="1" GroupName="Ausgabeformat" Name="HTMLAusgabe" HorizontalAlignment="Center">HTML</RadioButton>
<RadioButton Grid.Column="2" GroupName="Ausgabeformat" Name="DOCAusgabe" HorizontalAlignment="Center">DOC</RadioButton>
<RadioButton Grid.Column="3" GroupName="Ausgabeformat" Name="SVGAusgabe" HorizontalAlignment="Center">SVG</RadioButton>
<RadioButton Grid.Column="4" GroupName="Ausgabeformat" Name="TXTAusgabe" HorizontalAlignment="Center">TXT</RadioButton>
<RadioButton Grid.Column="5" GroupName="Ausgabeformat" Name="EXEAusgabe" HorizontalAlignment="Center">EXE</RadioButton>
</Grid>
</StackPanel>
</Border>
<Border Grid.Column="2" BorderThickness="1" BorderBrush="Blue">
<StackPanel Grid.Column="2">
<TextBlock TextAlignment="Center" FontSize="30">Logik</TextBlock>
<Label FontSize="15">Filterung:</Label>
<Label FontSize="15">Bedingungen:</Label>
<Label FontSize="15">Schleifen:</Label>
<Label FontSize="15">Benummerung:</Label>
<Label FontSize="15">Sortierung:</Label>
<Label FontSize="15">Gruppierung:</Label>
<Label FontSize="15">Kopieren:</Label>
<Label FontSize="15">Knotenerzeugung:</Label>
</StackPanel>
</Border>
</Grid>
</DataTemplate>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Control.Background" Value="white"/>
<Setter Property="Control.Foreground" Value="red"/>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Menu Grid.Row="0">
<MenuItem Header="Datei">
<MenuItem Header="Neu" Click="NeuerTab">
</MenuItem>
<MenuItem Header="Öffnen">
</MenuItem>
<MenuItem Header="Speichern">
</MenuItem>
<MenuItem Header="Speichern als...">
</MenuItem>
<MenuItem Header="Schließen">
</MenuItem>
<MenuItem Header="Beenden" Click="schliessen">
</MenuItem>
</MenuItem>
<MenuItem Header="Bearbeiten">
<MenuItem Header="Rückgàngig">
</MenuItem>
<MenuItem Header="Kopieren">
</MenuItem>
<MenuItem Header="Aussschneiden">
</MenuItem>
<MenuItem Header="Einfügen">
</MenuItem>
<MenuItem Header="Löschen">
</MenuItem>
<MenuItem Header="Suchen">
</MenuItem>
</MenuItem>
<MenuItem Header="XML">
<MenuItem Header="Wohlgeformtheit">
</MenuItem>
<MenuItem Header="Validierung">
</MenuItem>
<MenuItem Header="DTD aufrufen">
</MenuItem>
<MenuItem Header="Schema aufrufen">
</MenuItem>
</MenuItem>
<MenuItem Header="Transformationen">
<MenuItem Header="PDF erzeugen">
</MenuItem>
<MenuItem Header="PDF ansehen">
</MenuItem>
<MenuItem Header="HTML erzeugen">
</MenuItem>
<MenuItem Header="HTML ansehen">
</MenuItem>
<MenuItem Header="DOC erzeugen">
</MenuItem>
<MenuItem Header="DOC ansehen">
</MenuItem>
<MenuItem Header="Andere erzeugen">
</MenuItem>
<MenuItem Header="Andere ansehen">
</MenuItem>
</MenuItem>
<MenuItem Header="Werkzeuge">
<MenuItem Header="XSLT manuell">
</MenuItem>
<MenuItem Header="XQuery erzeugen">
</MenuItem>
<MenuItem Header="Anpassen">
</MenuItem>
<MenuItem Header="Optionen">
</MenuItem>
</MenuItem>
<MenuItem Header="Hilfe">
<MenuItem Header="Hilfe">
</MenuItem>
<MenuItem Header="Update">
</MenuItem>
<MenuItem Header="Über..." Click="Ueber">
</MenuItem>
</MenuItem>
</Menu>
<ToolBar Grid.Row="1">
<Button Click="NeuerTab" ToolTip="Neue Transformation">
<Image Width="20" Height="30" Source="D:\Eigenproduktionen\Sachprojekte\Naturwissenschaften\Computer\Programmentwicklungen\Alle C\AlphaXOmega\AlphaXOmega\File02.ico"/>
</Button>
</ToolBar>
<TabControl Grid.Row="2" Name="XMLTab" Height="Auto" Background="AliceBlue" ItemTemplate="{StaticResource TabItemTemplate}">
</TabControl>
</Grid>
</Window>



Hier die Code-Datei:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
using Microsoft.Win32;

namespace AlphaXOmega
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}

//Öffnen eines neuen Tabs einer ersten oder weiteren XML-Datei
für die Transformationen
private void NeuerTab(object sender, RoutedEventArgs e)
{
TabItem XMLTaber = new TabItem();
string title = "XML-Datei " + (XMLTab.Items.Count +
1).ToString();
XMLTaber.Header = title;
XMLTaber.Background = Brushes.LightSkyBlue;
XMLTaber.Foreground = Brushes.DarkBlue;
XMLTaber.ContentTemplate =
TryFindResource("TabItemTemplate") as DataTemplate;
XMLTab.Items.Add(XMLTaber);
XMLTaber.Focus();
}

//Schließen des Programms
private void schliessen(object sender, RoutedEventArgs e)
{
this.Close();
}

//Oeffnen des Ueber-Dialogs
private void Ueber(object sender, RoutedEventArgs e)
{
Window2 UeberFenster = new Window2();
UeberFenster.Show();
}

//Auswahl des Verzeichnisbaumes, in dem die zu selektierende
Datei liegt
private void Verzeichniswahl_ContextMenuOpening(object sender,
ContextMenuEventArgs e)
{
}

//Suchen und selektieren der zu bearbeitenden XML-Datei
private void Dateisuche_Loaded(object sender, EventArgs e)
{
}

//Anzeigen des Inhaltes der obigen Datei und selektieren des zu
bearbeitenden Knotens
private void Dateianzeige_Loaded(object sender, EventArgs e)
{
}
}
}


Vielleicht kann mir doch noch jemand helfen?

Gruß
Jürgen
 

Lesen sie die antworten

#1 Frank Dzaebel
17/05/2008 - 15:26 | Warnen spam
Hallo Jürgen,

Ich schaffe es aber immer noch nicht z. B. das Element ComboBox (z. B. das
mit dem Namen "Verzeichniselement") innerhalb des DataTemplates
anzusprechen. [...] Vielleicht kann mir doch noch jemand helfen?




private void NeuerTab(object sender, RoutedEventArgs e)
{
// [...] der Kürze halber weggelassen ...
XMLTaber.Focus();

ComboBox combo = FindVisualChildByName<ComboBox>(
XMLTab.SelectedContentTemplate.LoadContent(),
ComboBox.NameProperty, "Verzeichniswahl");
}

private childItem FindVisualChildByName<childItem>(
DependencyObject obj, DependencyProperty property,
string name) where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem &&
child.GetValue(property).Equals(name)) return (childItem)child;
else
{
childItem childOfChild = FindVisualChildByName<childItem>
(child, property, name);
if (childOfChild != null) return childOfChild;
}
}
return null;
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen