2011-08-18 15 views
5

Ho il seguente codice XAML che voglio eseguire in xaml.cs.Associazione di un oggetto RichTextBox a un controllo Slider in C#

<RichTextBox.LayoutTransform> 
    <ScaleTransform ScaleX="{Binding ElementName=mySlider, Path=Value}" 
        ScaleY="{Binding ElementName=mySlider, Path=Value}"/> 
</RichTextBox.LayoutTransform> 

Fondamentalmente lega il dispositivo di scorrimento al richtextbox ed esegue lo zoom.

Quello che segue è quello che ho tentato:

RichTextBox newtext = new RichTextBox(); 
ScaleTransform mytran = new ScaleTransform(); 
mytran.ScaleX = mySlider.Value; 
mytran.ScaleY = mySlider.Value; 
newtext.LayoutTransform = mytran; 

risposta

3

Il codice seguente è dietro equivalente al Xaml

//<RichTextBox.LayoutTransform> 
// <ScaleTransform ScaleX="{Binding ElementName=mySlider, Path=Value}" 
//     ScaleY="{Binding ElementName=mySlider, Path=Value}"/> 
//</RichTextBox.LayoutTransform> 

ScaleTransform scaleTransform = new ScaleTransform(); 
Binding scaleXBinding = new Binding("Value"); 
scaleXBinding.Source = mySlider; 
Binding scaleYBinding = new Binding("Value"); 
scaleYBinding.Source = mySlider; 
BindingOperations.SetBinding(scaleTransform, 
          ScaleTransform.ScaleXProperty, 
          scaleXBinding); 
BindingOperations.SetBinding(scaleTransform, 
          ScaleTransform.ScaleYProperty, 
          scaleYBinding); 

RichTextBox newText = new RichTextBox(); 
newText.LayoutTransform = scaleTransform; 
1

Non è sicuro se stai chiedendo come eseguire l'associazione nel codice, o il modo di impostare le proprietà ScaleX e ScaleY nel codice (ad esempio, senza rilegatura). In tal caso, ecco come procedere:

Innanzitutto, assegna un nome a ScaleTransform, ad es. "myScaleTransform":

<RichTextBox.LayoutTransform> 
    <ScaleTransform x:Name="myScaleTransform" ScaleX="1" ScaleY="1" /> 
</RichTextBox.LayoutTransform> 

Quindi, aggiungere un gestore di eventi per la ValueChanged caso di mySlider. In questo gestore, aggiornare i ScaleX e ScaleY proprietà di myScaleTransform:

public void mySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
{ 
    myScaleTransform.ScaleX = mySlider.Value; 
    myScaleTransform.ScaleY = mySlider.Value; 
} 

Spero che questo aiuti.

1

avete impostato la trasformazione, ma non il legame - sarà risolto. È necessario usare qualcosa come

Binding scaleBinding = new Binding("Value"){ElementName="mySlider"}; 
BindingOperations.SetBinding(mytran, ScaleTransform.ScaleXProperty, scaleBinding); 
BindingOperations.SetBinding(mytran, ScaleTransform.ScaleYProperty, scaleBinding); 

davvero allo stesso