es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

x:Bind a ActualWidth parece no funcionar.

Estoy programando en C# UWP. Tengo un UserControl con el siguiente código de ejemplo:

<usercontrol x:class="Sample.AllocPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="Sample" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" name="Root" mc:ignorable="d">
    <relativepanel>
        <autosuggestbox width="{Binding Mode=OneWay, Path=ActualWidth, ElementName=Root}" margin="50,0,50,0" relativepanel.alignhorizontalcenterwithpanel="True" relativepanel.alignverticalcenterwithpanel="True"></autosuggestbox>
    </relativepanel>
</usercontrol>

Este código funciona. Sin embargo, quiero utilizar el nuevo x:Bind, así que reemplacé {Binding Mode=OneWay, Path=ActualWidth, ElementName=Root} con {x:Bind Mode=OneWay, Path=Root.ActualWidth}. Por alguna razón, ahora la caja de sugerencias automática completa <autosuggestbox> ha desaparecido de la pantalla, supongo que el ancho que está obteniendo es 0.

¿Por qué ocurre esto y cómo puedo solucionarlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Esto ocurre porque {x:Bind} funciona de manera diferente a {Binding}. Con {Binding}, la vinculación es dinámica y actualiza la interfaz de usuario cada vez que cambia el valor vinculado. Sin embargo, con {x:Bind}, la vinculación es estática y solo actualiza la interfaz de usuario una vez, cuando se carga el control.

    En este caso específico, el ActualWidth del UserControl es 0 cuando se carga el AutoSuggestBox, por lo que el Width del AutoSuggestBox también se establece en 0. Para solucionar esto, puedes agregar un valor predeterminado a la expresión {x:Bind} utilizando el atributo FallbackValue. Por ejemplo, {x:Bind Mode=OneWay, Path=Root.ActualWidth, FallbackValue=200} establece el ancho en 200 si el ActualWidth es 0.

    Otra opción es utilizar un evento Loaded en el código subyacente para actualizar el Width del AutoSuggestBox después de que el UserControl se haya cargado y su ActualWidth ya no sea 0.

Comments are closed.