在下面来自.Net Maui XAML 2009的示例中,为什么RelativeSource无法获取选取器?

pbgvytdp  于 2023-01-22  发布在  .NET
关注(0)|答案(1)|浏览(134)
<Picker>
    <Picker.ItemsSource>
        <c:List x:TypeArguments="x:String">
            <x:String>apple</x:String>
            <x:String>orange</x:String>
        </c:List>
    </Picker.ItemsSource>
    <Picker.SelectedItem>
        <Binding>
            <Binding.Converter>
                <local:SampleConverter SampleBindable="{Binding ItemsSource, Source={RelativeSource FindAncestor, AncestorType={x:Type Picker}}}" />
            </Binding.Converter>
        </Binding>
    </Picker.SelectedItem>
</Picker>

我的理解是,我可以通过在FindAncestor的AncestorType中指定"Picker"来获得Picker控件,但实际情况似乎并非如此,有人能解释一下为什么吗?
如果我给Picker一个名称,并将RelativeSource更改为x:Reference,如下所示,我可以成功地获得它("SampleBindable"属性反映了Picker的ItemsSource的内容)。
x一个一个一个一个x一个一个二个x
但是,每次只为这些绑定命名控件似乎有点多余......有人知道一种避免命名Picker控件的方法吗?

ckx4rj1h

ckx4rj1h1#

Source通常用于静态寻址位于其他位置的源。如果您想爬上树以查找相对父级,可以改用RelativeSource。尝试以下操作:

<local:SampleConverter SampleBindable="{Binding ItemsSource, 
    RelativeSource={RelativeSource AncestorType={x:Type Picker}}}" />

相关问题