2010-03-18 15 views
6

Soy un principiante en Silverlight, así que espero que pueda obtener una respuesta que me brinde más luz en el proceso de medición de Silverlight.Cómo medir un lienzo que tiene altura y ancho automáticos

Encontré un control de aleta interessting desde silverlight slide control y ahora trato de usarlo en mi proyecto. Para que el deslizamiento funcione correctamente, tengo que colocar el control del usuario en un lienzo. El control de usuario utiliza entonces la altura de su contenido. Solo quiero cambiar ese comportamiento para que la altura se establezca en el espacio disponible del lienzo principal.

Verá el uxBorder donde se establece la altura. ¿Cómo puedo medir la altura real y establecerla en el borde?

Lo probé con Height={Binding ElementName=notificationCanvas, Path=ActualHeight} pero esta propiedad de dependencia no tiene devolución de llamada, por lo que la altura real nunca se establece.

Lo que queremos lograr es un control de usuario como el Tweetboard por ejemplo en Jesse Liberty's blog

Lo siento por mi Inglés escrito, espero que entienda mi pregunta.

<Canvas x:Name="notificationCanvas" Background="Red"> 
      <SlideEffectEx:SimpleSlideControl GripWidth="20" GripTitle="Task" GripHeight="100"> 
       <Border x:Name="uxBorder" 
        BorderThickness="2" 
        CornerRadius="5" 
        BorderBrush="DarkGray" 
        Background="DarkGray" 
        Padding="5" Width="300" 
        Height="700" 
        > 
        <StackPanel> 
         <TextBlock Text="Tasks"></TextBlock> 
         <Button x:Name="btn1" Margin="5" Content="{Binding ElementName=MainBorder, Path=Height}"></Button> 
         <Button x:Name="btn2" Margin="5" Content="Second Button"></Button> 
         <Button x:Name="btn3" Margin="5" Content="Third Button"></Button> 
         <Button x:Name="btn1_Copy" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy1" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy2" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy3" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy4" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy5" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy6" Margin="5" Content="First Button"/> 
        </StackPanel> 
       </Border> 
      </SlideEffectEx:SimpleSlideControl> 

Respuesta

1

Hey - un par de cosas:

  • supongo que es sólo un error tipográfico, pero: "{Binding ElementName = MainBorder, Path = Altura}" debe ser " {Binding ElementName = uxBorder, Path = Altura}"(o ActualHeight)
  • El SlideEffect parece establecer una geometría clip, que va a afectar la forma en "grande" se ve

    RectangleGeometry clipRect = new RectangleGeometry();

    clipRect.Rect = new Rect(0, 0, panel.ActualWidth, host.Height);

    host.Clip = clipRect;

Si comente todas las líneas anteriores de la corredera de control, debería ver un cambio notable en lo grande que se ve el panel.

1

Creo que las propiedades ActualWidth o ActualHeight no son configurables solo gettable.

Para eso no podrá utilizar el enlace, tal vez si crea el elemento después de que la página se haya cargado, ya que el Tamaño real del lienzo en el momento de la creación será desconocido.

¿Por qué no intenta crear una propiedad para esto, con enlace bidireccional, y firmar el evento Canvas en layoutUpdated y actualizar el valor de la propiedad, por lo tanto, actualizar todos los objetos dependientes.
No sé si este evento es el correcto, con cheque si es de ayuda.

Cuestiones relacionadas