Xaml VS-designer-Fehler: '{DependencyProperty.UnsetValue}'
Baue ich eine benutzerdefinierte tabitem mit Vorlage-Bindung. Alles ist fein, bis ich verwendet, die verbindlich auf den Rand, um einen benutzerdefinierten Wert Konverter, dann bekomme ich eine Fehlermeldung in der VS-designer:
'{DependencyProperty.UnsetValue}' ist kein Gültiger Wert für den 'System.Windows.Controls.Kontrolle.Template-Eigenschaft ein Setter.
Die Wandler sind wie folgt:
public class ContentToMarginConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new Thickness(0, 0, -((ContentPresenter)value).ActualHeight, 0);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
public class ContentToPathConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var ps = new PathSegmentCollection(4);
ContentPresenter cp = (ContentPresenter)value;
double h = cp.ActualHeight > 10 ? 1.4 * cp.ActualHeight : 10;
double w = cp.ActualWidth > 10 ? 1.25 * cp.ActualWidth : 10;
ps.Add(new LineSegment(new Point(1, 0.7 * h), true));
ps.Add(new BezierSegment(new Point(1, 0.9 * h), new Point(0.1 * h, h), new Point(0.3 * h, h), true));
ps.Add(new LineSegment(new Point(w, h), true));
ps.Add(new BezierSegment(new Point(w + 0.6 * h, h), new Point(w + h, 0), new Point(w + h * 1.3, 0), true));
return ps;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Und die xaml-Vorlage wie folgt:
<Style TargetType="TabItem">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Grid Name="grd">
<Path Name="tabPath"
StrokeThickness="1"
Stroke="{StaticResource ResourceKey=borderBrush}"
Fill="{StaticResource ResourceKey=unselectedBrush}"
Margin="{Binding ElementName=TabItemContent,Converter={StaticResource ResourceKey=content2Margin}}">
<Path.Data>
<PathGeometry>
<PathFigure IsClosed="False" StartPoint="1,0"
Segments="{Binding ElementName=TabItemContent,Converter={StaticResource ResourceKey=content2Path}}">
</PathFigure>
</PathGeometry>
</Path.Data>
<Path.LayoutTransform>
<ScaleTransform ScaleY="-1"/>
</Path.LayoutTransform>
</Path>
<Rectangle Name="TabItemTopBorder" Height="2" Visibility="Visible"
VerticalAlignment="Bottom"
Margin="{Binding ElementName=TabItemContent, Converter={StaticResource ResourceKey=content2Margin}}" />
<ContentPresenter Name="TabItemContent" ContentSource="Header"
Margin="10,2,10,2" VerticalAlignment="Center"
TextElement.Foreground="White"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" SourceName="grd">
<Setter Property="Stroke" Value="{StaticResource HoverBrush}" TargetName="tabPath"/>
</Trigger>
<Trigger Property="Selector.IsSelected" Value="True">
<Setter Property="Fill" TargetName="tabPath" Value="{StaticResource ResourceKey=backgroundBrush}"/>
<Setter Property="Panel.ZIndex" Value="2"/>
<Setter Property="Visibility" Value="Hidden" TargetName="TabItemTopBorder"/>
<Setter Property="TextElement.Foreground" TargetName="TabItemContent" Value="Black"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Einen Grund warum ich diese Fehlermeldung in der designer, doch wenn ich das Projekt erstellen in Ordnung ist????
- Es ist nicht ungewöhnlich, Probleme mit dem designer, aber nicht zur Laufzeit. Ist das Problem mit beiden custom IValueConverters, oder nur einer von Ihnen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe versucht, die Kontrolle der Entwurfszeit-flag innerhalb des benutzerdefinierten Konverter, aber das hat nicht funktioniert. Ich schaffte es, diese Arbeit von einer änderung der Art und Weise der pathfigure war gebunden an den Konverter wie in diesem folgenden
Wie erstellen Trapez tabs tab-control in WPF
Hatte ich einen ähnlichen Fehler auch. Mein Wandler definiert sind, in einer separaten assembly.
Ich habe versucht, den Wiederaufbau der Lösung, Neustart von Visual Studio,... die designer immer noch nicht funktioniert hat.
Aber nach löschen aller Dateien (einschließlich der Quell-Dateien und die Ausgabe-Dateien), erhalten die source-Dateien wieder und erstellen Sie die Lösung, ist das problem behoben.
Designer wird im wesentlichen tun, eine pre-kompilieren, was es braucht, um Ihre Inhalte anzuzeigen, die in der design-Ansicht.
Die Probleme verursachen können.
Wenn eine Wiederherstellung die Lösung nicht funktioniert, ist Ihre nächste beste Sache ist, zu erkennen, der designer-Modus und umgehen den Konverter. Im wesentlichen mit einer wenn(isdesignmode) zurück; an der Spitze der Convert-Methode.
Mehr info auf, wie zu tun, dass hier Wie zu zwingen, Visual Studio 2010, um das ignorieren eines WPF-XAML deklariert DataContext zur design-Zeit?
Hatte ich einen ähnlichen Fehler. Mein problem verursacht wurde, da hatte ich definiert in der Style-definition, die mithilfe von x:Key="keyName" und " x:Name="keyName". Durch das entfernen des "x:Name='keyName'", das problem bei mir gelöst.