Hallo,
ich habe eine AttachedProperty welche eine Liste ist, die CustomClass in dieser Liste hat ebenfalls zwei Listen mit CustomClasses.
Wenn ich eine gebunden Eigenschaft ändere wird nur der ChangedCallback innerhalb des Items gecalled.
Ich müsste entweder das changed event bis nach oben hoch geben oder im unteren ChildItem wissen zu welchem Object(UIElement diese Eigenschaft gebunden wurde?
Hat jemand eine Idee wie ich in einem AttachedProperty Collection Item auf das Object zugreife mit dem die AttachedProperty gesetzt wurde?
FreezableCollection und das binding mit x:Reference war die Lösung...
BindingValue="{Binding Path=Text, Source={x:Reference tb_value} }"
Danke!
Ok, also wenn ich einfach einen statischen Text festlege wird die PropertyChangedCallback methode gecalled. In Snoop sehe ich das die Property leer ist, wenn ich sie mit snoop setze wird der callback ebenfalls gefeuert. Nur mit einem Binding bleibt die Property immer leer...
Nur mit DependencyObject geht es auch nicht. Aber ich sehe das der Setter für BindingValue in der ComparsionCondition Klasse nie gecalled wird. Obwohl ich den Wert im XAML setze??
Hat jemand eine Idee warum der Wert nie gesetzt wird?
Hallo,
danke für deine Antwort. Key ist nur in RessourceDictionaries erlaubt. Ich denke aber auch nicht das das helfen würde.
Viele Grüße,
Simon
Hallo,
ich habe eine Liste als attached property. Die Liste besteht aus einer CustomClass.
Im Xaml Code würde ich gerne eine dieser Properties zu einer TextBox binden.
Wenn ich das versuche, kriege ich kein update der Textbox durchgereicht. Die Set Methode wird nie aufgerufen, daher denke ich das Binding geht verloren.
Hat jemand eine Idee dazu?
CustomClass
public class ComparsionCondition : DependencyObject, INotifyPropertyChanged
{
public static readonly DependencyProperty BindingValueProperty =
DependencyProperty.Register("BindingValue", typeof(string),
typeof(ComparsionCondition), new PropertyMetadata("bindval"));
public string BindingValue
{
get
{
return (string)GetValue(BindingValueProperty);
}
set
{
SetValue(BindingValueProperty, value);
OnPropertyChanged("BindingValue");
}
}
#region INotifyPropertyChanged Member
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
Behavior:
public static class ComparsionBehavior
{
#region ComparsionConditions
public static TrulyObservableCollection<ComparsionCondition> GetComparsionConditions(DependencyObject frameworkElement)
{
return (TrulyObservableCollection<ComparsionCondition>)frameworkElement.GetValue(ComparsionConditionsProperty);
}
public static void SetComparsionConditions(DependencyObject frameworkElement, TrulyObservableCollection<ComparsionCondition> value)
{
frameworkElement.SetValue(ComparsionConditionsProperty, value);
}
public static readonly DependencyProperty ComparsionConditionsProperty = DependencyProperty.RegisterAttached(
"ComparsionConditions", typeof(TrulyObservableCollection<ComparsionCondition>), typeof(ComparsionBehavior), new UIPropertyMetadata(new TrulyObservableCollection<ComparsionCondition>(), OnComparsionConditionsChanged));
static void OnComparsionConditionsChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
HandlePropertyChanged(sender);
}
#endregion
}
XAML usage
<TextBox Text="85" x:Name="tb_value"></TextBox>
<Border>
<Behavior:ComparsionBehavior.ComparsionConditions>
<Behavior:ComparsionCondition BindingValue="{Binding Path=Text, ElementName=tb_value}">
</Behavior:ComparsionCondition>
</Behavior:ComparsionBehavior.ComparsionConditions>
</Border>
Hallo,
ich habe schon mal appointments in c# erstellt.
Nun würde ich gerne einen Kompletten Kalender und Termine, anhand von XML Daten, aus c# generieren. Den link auf diesen im Intervall neu generierten Kalender dann auch später in outlook importieren.
Hat jemand einen Tip oder Link wie ich einen kompletten Kalender erstellen kann?
Vielen Dank und schöne Grüße,
Simon
Haha, das ist 3 Jahre her, ich weiss nicht mal mehr für was das war 😃 DAnke trotzdem.
hmm danke für die Antwort das macht es natuerlich leichter... Hatte das bisher nur mal bei Bildern gemacht mit unterschiedlichen Groessen vielleicht war ich deshalb etwas zu kompliziert... Aber auch wenn das natuerlich stimmt das das Verhältnis 1,25 betraegt. Buttons die 30x30 sind sind nun eher Rechtecke und länger wie hoch...
private void SetApplicationStartUpPosition()
{
double originalHeight = 1024;
double originalWidth = 1280;
if (Screen.PrimaryScreen.WorkingArea.Height < originalHeight)
{
double newWidth = 1.25 * Screen.PrimaryScreen.WorkingArea.Height;
this.Width = newWidth;
this.Height = Screen.PrimaryScreen.WorkingArea.Height;
}
}
Ich hab jetzt mal was hingemurkst aber is nicht besonders schön 😃
private void SetApplicationStartUpPositionAndSize()
{
double originalHeight = 1024;
double originalWidth = 1280;
double newWidth = originalWidth;
double onePercentOriginal = originalHeight/100;
double newPercentageHeight = SystemParameters.FullPrimaryScreenHeight/onePercentOriginal;
newPercentageHeight = Math.Truncate(newPercentageHeight);
double percentageHeightChangeToOriginal = newPercentageHeight - 100;
if (percentageHeightChangeToOriginal == 0)
{
percentageHeightChangeToOriginal = 1;
newWidth = originalWidth*percentageHeightChangeToOriginal;
}
else
{
double widthToSubstract = originalWidth * percentageHeightChangeToOriginal;
newWidth = widthToSubstract - originalWidth;
}
this.Width = newWidth;
this.Height = SystemParameters.FullPrimaryScreenHeight;
WindowStartupLocation = WindowStartupLocation.Manual;
Rectangle workingArea = Screen.PrimaryScreen.WorkingArea;
Left = (workingArea.Width - 1280)/2;
Top = (workingArea.Height - 1024)/2;
}