Laden...

Ist ein StaticResource Property Binding möglich?

Erstellt von Seikilos vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.703 Views
S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 12 Jahren
Ist ein StaticResource Property Binding möglich?

Hallo,

ich habe zwei Buttons

	<Button Content="Button 1" Background="{Binding Background, ElementName=button2}" HorizontalAlignment="Left" Height="66" Margin="54,70,0,0" VerticalAlignment="Top" Width="106"/>
		<Button Content="Button 2" Name="button2" Height="66" Margin="274,70,240,0" VerticalAlignment="Top" Background="#FF938888"/>

Der erste Button hat ein Binding auf den Background des anderen.
Wenn ich zur Laufzeit den Background des zweiten Buttons ändere, so ändert sich auch der BG des ersten.

Gibt es einen Weg, wie ich jedoch das Binding als StaticResource benutze?
Der Sinn: Ich weiß den Background für den button2 noch nicht final und möchte daran rumspielen. Wenn ich die Anwendung starte, soll diese Farbe einmal (also quasi als StaticResource) vom Property des button2 gelesen werden. Das bekomme ich jedoch nicht hin.

P.S: Ich will den Background nicht für beide als Resource in Window.Resources anlegen. Hier gehts mir um die Frage, ob es generell möglich ist, ein Property Binding als StaticResource zu benutzen

Danke

Life is a short

5.742 Beiträge seit 2007
vor 12 Jahren

Ich will den Background nicht für beide als Resource in Window.Resources anlegen.

Warum nicht?
Das einfachste und sauberste wäre, einen Style in den Resourcen anzulegen und dann diesen dem Button zuzuweisen.

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 12 Jahren

Hallo,

Background ist nur ein Beispiel. Konkret gehts mir um die Position eines Objekts, welches ich noch hin und her schiebe, das wird ziemlich mühselig über eine Resource zu regeln

Life is a short

5.658 Beiträge seit 2006
vor 12 Jahren

Hi Seikilos,

Hier gehts mir um die Frage, ob es generell möglich ist, ein Property Binding als StaticResource zu benutzen

Die Frage wurde ja bereits beantwortet.

Konkret gehts mir um die Position eines Objekts, welches ich noch hin und her schiebe, das wird ziemlich mühselig über eine Resource zu regeln

Das ist dagegen noch etwas erklärungsbedürftig. Also was möchtest du erreichen, was hast du probiert, und was funktioniert noch nicht?

Christian

Weeks of programming can save you hours of planning

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 12 Jahren

Hi Seikilos,

Hier gehts mir um die Frage, ob es generell möglich ist, ein Property Binding als StaticResource zu benutzen

Die Frage wurde ja bereits beantwortet.

Konkret gehts mir um die Position eines Objekts, welches ich noch hin und her schiebe, das wird ziemlich mühselig über eine Resource zu regeln

Das ist dagegen noch etwas erklärungsbedürftig. Also was möchtest du erreichen, was hast du probiert, und was funktioniert noch nicht?

Christian

Hallo,

wo genau wurde die Frage beantwortet? Ich sehe die Antwort nicht.

Der Kontext ist: Ich habe ein Panel, welches ich über ein Storyboard auf Befehl in eine Richtung bewegen möchte.
Nun möchte ich auf einen anderen Befehl das Panel wieder auf die Originalposition bewegen.
Da ich keinen gescheiten Weg gefunden habe, wie ich ein Storyboard gesteuert rückwärts abspielen lassen kann, habe ich mir ein zweites Storyboard angelegt.

So ungefähr:

<Storyboard x:Key="Forward" DecelerationRatio="0.5" AccelerationRatio="0.5">
    		<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="wrapPanelHome">
    			<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="-820"/>
    		</DoubleAnimationUsingKeyFrames>
    		
    	</Storyboard>

        <Storyboard x:Key="Backward" DecelerationRatio="0.5" AccelerationRatio="0.5">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="wrapPanelHome">
                <SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="[WERT?]"/>
            </DoubleAnimationUsingKeyFrames>
        
        </Storyboard>

Das Problem ist, welchen Value soll mein Storyboard Backward bekommen?
Ich schiebe das Panel noch hin und her und kenne den Endwert noch gar nicht. Da ich es hier jedoch nicht manuell eintragen möchte um möglichst konsistent zu sein, wollte ich den Value als StaticResource anlegen. So dass beim Application Start EINMAL die aktuelle X Position des Targets gelesen wird.
Bei einem Binding würde der Wert nach dem Ablauf der erst Animation bei der Backward Animation nun nicht mehr auf den Ursprung zeigen

Life is a short

5.658 Beiträge seit 2006
vor 12 Jahren

Hi Seikilos,

alles klar, jetzt verstehe ich worauf du hinauswillst. Also zuersteinmal muß ich dir leider mitteilen, daß es so, wie du dir das vorgestellt hast, nicht geht! Eine statische Resource ist eben von Natur aus statisch. Die Originalposition deines Steuerelements wird sicherlich vom Layout-System automatisch berechnet. Im Prinzip müßtest du dir also bei jedem Verschiebevorgang merken, wohin das Element später wieder zurückverschoben werden soll. Das geht dann aber nicht mehr mit dem Storyboard, sondern nur per Code.

Allerdings verwendest du für das Storyboard sowieso TranslateTransform, so daß du die Werte einfach auf 0 zurücksetzen kannst, um das Steuerelement wieder auf die Ausgangsposition zu verschieben.

Andererseits wäre es evtl. sinnvoll zu überlegen, ob es nicht schon ein Steuerelement gibt, das genau dieses Verhalten besitzt. Vielleicht kommst du hier mit einem entsprechend gestylten Expander besser zurecht?

Christian

Weeks of programming can save you hours of planning

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 12 Jahren

Hallo,
danke für die Erklärung. Aktuell löse ich das tatsächlich einfach über RenderTransform und 0.
Expander gucke ich mir mal an und weiß nun zumindest Bescheid, dass es so nicht geht.

Danke

Life is a short