2011-08-18 16 views
5

Tengo el siguiente código XAML que quiero realizar en xaml.cs.Enlazando un RichTextBox a un control deslizante en C#

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

Básicamente, vincula el control deslizante al richtextbox y realiza el zoom.

Lo siguiente es lo que he intentado:

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

Respuesta

3

El siguiente código detrás es equivalente a la 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

No estoy seguro si usted está preguntando cómo llevar a cabo la unión en el código, o cómo establecer las propiedades ScaleX y ScaleY en el código (por ejemplo, sin Unión). Si este es el caso, así es como lo haría:

Primero, proporcione un nombre a su ScaleTransform, p. "myScaleTransform":

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

A continuación, agregue un controlador de eventos para el caso de ValueChangedmySlider. En este controlador, actualizar los ScaleX y ScaleY propiedades de myScaleTransform:

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

Espero que esto ayude.

1

se ha configurado la transformada pero no la unión - que será fijado. Es necesario utilizar algo así como

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

a realmente a la misma

Cuestiones relacionadas