Pregunta

Me estoy poniendo todas aprendido acerca de la unión en WPF.Estoy teniendo un montón de problemas de depuración de los errores de análisis en mi xaml, aunque.Puede alguien bastante por favor, dime lo que está mal con esta pequeña pieza?:

<Border Name="TrackBackground"
    Margin="0"
    CornerRadius="2"                     
    Grid.Row="1"
    Grid.Column="1"
    Background="BlanchedAlmond"
    BorderThickness="1"
    Height="{TemplateBinding Height}">

    <Canvas Name="PART_Track" Background="DarkSalmon" Grid.Row="1" Grid.Column="1">
        <Thumb Name="ThumbKnob" Height="{Binding ElementName=Part_Track, Path=Height, Mode=OneWay}" />
    </Canvas>
</Border>

Es el enlace que se rompe.Puedo obtener un InvalidAttributeValue excepción para ThumbKnob.Altura cuando trato de ejecutar este.Sé que debo estar perdiendo algo fundamental.Así que me relleno, apiladores, y mi gratitud será ilimitada.


El cambio de la ElementName no ayuda.No me debe algo más que yo no estoy.

Debo mencionar que estoy probando esta en Silverlight.El mensaje exacto estoy saliendo de Internet Explorer es:

XamlParseException: Invalid attribute value for property Height.

Todo esto está dentro de un ControlTemplate.Estoy haciendo un control deslizante sólo para enseñarme a los conceptos.

¿Fue útil?

Solución

El ElementName propiedad en un Enlace no es compatible con Silverlight.

Usted se dará cuenta, si usted entra en el código detrás o inspeccionar el objeto de Enlace en el explorador de clases, no tiene una propiedad denominada ElementName.

Otros consejos

Lo que yo suelo hacer para depurar databindings, es agregar un convertidor donde puedo establecer un punto de interrupción en VS.NET..

así que la Unión podría ser algo como esto:

{Binding ElementName=PART_Track, Path=Height, Mode=OneWay, Converter={StaticResources DebugConverter}}

A continuación, el convertidor puede ser un vacío en la implantación de un IValueConverter, establecer un punto de interrupción en el método Convert y ver lo que la Altura se establece en...

No te olvides de añadir su convertidor a sus Recursos...

Tal vez el valor es de NaN ?

Ok, aquí está el trato:

En silverlight, usted no puede enlazar los valores de un elemento de interfaz de usuario a otro de forma declarativa.La única manera de hacer lo que yo estaba tratando de hacer aquí, en el código de C#.

Yo tenía una referencia para ayer, pero ahora supongo que tendré que tomar mi palabra para ella :)

Hmm puede ser que exista una diferencia sustancial entre WPF en Silverlight en este punto..

Me parece que no tienen problemas para lo que incluso compilar y ejecutar este ejemplo en una ventana WPF:

<Slider Width="400" Height="20">
    <Slider.Template>
        <ControlTemplate>
            <Border Name="TrackBackground"
                Margin="0"
                CornerRadius="2"                     
                Grid.Row="1"
                Grid.Column="1"
                Background="BlanchedAlmond"
                BorderThickness="1">

                <Canvas x:Name="PART_Track" Background="DarkSalmon" Grid.Row="1" Grid.Column="1">
                    <Thumb Name="ThumbKnob" Height="{Binding ElementName=PART_Track, Path=Height, Mode=OneWay}" />
                </Canvas>
            </Border>
        </ControlTemplate>
    </Slider.Template>
</Slider>

Quizás Silverlight tiene menos propiedades en el dedo Pulgar de la clase...

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.thumb.aspx

Primero que todo es una cuestión de carcasa...

Cambio

Part_Track
a
PART_Track
que va a arreglar su error de enlace..

Pero no creo que esto es lo que están tratando de hacer..

Usted podría utilizar una Cuadrícula en lugar de un lienzo, y el Pulgar se tamaño de forma automática.Lienzo, en realidad no tiene una altura, para que en realidad no importa la altura de sus hijos...

Espero que esto ayude...

Es la Frontera, en una Plantilla btw ?

Porque no hay ninguna necesidad de TemplateBinding si la frontera no se encuentra en una Plantilla (ControlTemplate o DataTemplate)

Silverlight 3 ahora incluye ElementName enlace...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top