Hallo an Alle!
ich komme einfach nicht weiter! Ich versuche eine einfache Bindung von einem DataTemplate an sein Parent herzustellen. Hier mal mein code:
<DataTemplate x:Key="centralTile">
<Border SnapsToDevicePixels="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="5"
BorderBrush="{DynamicResource _SolidColorBrush_darkcolor}" Margin="2,5,5,5" CornerRadius="5" >
<DockPanel x:Name="testtest"
Height="{TemplateBinding ItemHeight}"
Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemWidth}"
Background="{DynamicResource _SolidColorBrush_darkcolor}" Margin="-1,0,-1,0" LastChildFill="True" >
<Grid HorizontalAlignment="Center" x:Name="ImageGrid" DockPanel.Dock="Top">
<Image
MaxHeight="150"
Source="{Binding Path=FullPath}" Margin="6,6,15,6"/>
</Grid>
<TextBlock Text="{Binding Path=Name}" FontSize="13" DockPanel.Dock="Bottom"
HorizontalAlignment="Center" Margin="10,0,10,10" />
<Grid > <!--dummy-->
</Grid>
</DockPanel>
</Border>
</DataTemplate>
<local:CPlainView x:Key="tileView" x:Name="tileView_PV"
ItemTemplate="{StaticResource centralTile}"
ItemWidth="300" ItemHeight="200"/>
Mein CPlainView Objekt tileview_PV bekommt als ItemTemplate das DataTemplate mit dem Namen centralTile. In diesem DataTemplate habe ich ein DockPanel mit dem Namen testtest. Nun versuche ich die Breite und die Höhe dieses DockPanels an die ItemWidth und ItemHeight von tileView_PV zu binden. Nur kann ich es nicht.
Wie muss so ein Binding den aussehen ?
Mit einem einfachen{Binding ElementName=tileView_PV, Path=ItemWidth} ging es auch nicht.
Für Eure Hilfe schon mal vielen Dank!
MFG Mike
Probier mal folgendes:
{Binding RelativeSource={RelativeSource AncestorType={x:Type local:CPlainView}}, Path=ItemWidth}
Lg, XXX
sorry, aber das funktioniert auch nicht
ich habe es kopiert
<DockPanel x:Name="testtest"
Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:CPlainView}}, Path=ItemHeight}"
Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:CPlainView}}, Path=ItemWidth}"
es kommt aber immer noch ne Fehlermeldung
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='...............
Danke aber trotzdem
er schreibt in der Fehlermeldung was von AncestorLevel='1''...
Der Vorfahre von testtest ist doch aber die Border?
Ich schaffs nicht auf nur irgendeine Weise deinen Fehler nachzustellen.
Was ist local:CPlainView für ein Control?
Ist ItemTemplate ein eigenes Property? Wenn ja wie definiert und wo und wie verwendet?
Lg, XXX
//PS: Der Fehler sagt eigentlich eh schon alles aus und drückt auch meine Vermutung aus: In deiner Objekthierachie ist anscheinend vom DockPanel bis zum Window rauf nirgends ein Element vom Typ CPlainView dazwischen. Zumindest bekomm ich nur in solchen Fällen diesen Fehler.
ja CPlainView ist ein Control
public class CPlainView : ViewBase
{
public static readonly DependencyProperty
ItemContainerStyleProperty =
ItemsControl.ItemContainerStyleProperty.AddOwner(typeof(CPlainView));
public Style ItemContainerStyle
{
get { return (Style)GetValue(ItemContainerStyleProperty); }
set { SetValue(ItemContainerStyleProperty, value); }
}
public static readonly DependencyProperty ItemTemplateProperty =
ItemsControl.ItemTemplateProperty.AddOwner(typeof(CPlainView));
public DataTemplate ItemTemplate
{
get { return (DataTemplate)GetValue(ItemTemplateProperty); }
set { SetValue(ItemTemplateProperty, value); }
}
public static readonly DependencyProperty ItemWidthProperty =
WrapPanel.ItemWidthProperty.AddOwner(typeof(CPlainView));
public double ItemWidth
{
get { return (double)GetValue(ItemWidthProperty); }
set { SetValue(ItemWidthProperty, value); }
}
public static readonly DependencyProperty ItemHeightProperty =
WrapPanel.ItemHeightProperty.AddOwner(typeof(CPlainView));
public double ItemHeight
{
get { return (double)GetValue(ItemHeightProperty); }
set { SetValue(ItemHeightProperty, value); }
}
protected override object DefaultStyleKey
{
get
{
return new ComponentResourceKey(GetType(), "myPlainViewDSK");
}
}
}
Ich kann nicht erklären warum, aber irgendwie wird die View "wegrationalisiert" oder so und ist anscheinend im VisualTree nicht vorhanden weswegen sie mit RelativeSource nicht aufspürbar ist.
Was aber gehen sollte ist zuerst die ListView suchen und dann über die View Eigenschaft wieder runterhangeln:
{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Path=View.ItemWidth}
Lg, XXX
Hallo xxxprof!
Ja das hat funktioniert. Danke noch mal, ohne deinen Tipp hätte ich es nicht hinbekommen.
MFG Mike