我可以从 UserControl 绑定到 DataTemplate 吗?
Can I Bind from UserControl to DataTemplate?
我想从 UserControl 绑定到 DataTemplate。
但是我得到错误
Cannot find source for binding with reference 'ElementName=LoginTextBox'. BindingExpression:(no path); DataItem=null; target element is 'Grid' (Name=''); target property is 'FocusedElement' (type 'IInputElement')
我的代码
<UserControl>
<UserControl.Resources>
<DataTemplate DataType="{x:Type models:LocalAuthenticationMethod}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="72"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" VerticalAlignment="Center"
Text="{uiCommon:LocalizationBinding ResourceName=Login}"
FontSize="{DynamicResource LoginWindowPropertiesFontSize}"/>
<!-- bind to here -->
<ComboBox x:Name="LoginTextBox"
Grid.Column="1"
Height="24"
Text="{Binding ElementName=Root, Path=DataContext.Login, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"
ItemsSource="{Binding ElementName=Root, Path=DataContext.AvailableUsers, Mode=OneWay}"
IsEditable="True"
behavior:FocusAdvancement.AdvancesByEnterKey="True"
FontSize="{DynamicResource LoginWindowPropertiesFontSize}">
<b:Interaction.Behaviors>
<behavior:SelectTextOnGotFocusBehavior/>
<behavior:SelectTextOnTargetUpdatedBehavior/>
</b:Interaction.Behaviors>
</ComboBox>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="Root">
<!-- how to bind here? -->
<Grid FocusManager.FocusedElement="{Binding ElementName=LoginTextBox}">
<ContentControl>
<ContentPresenter Content="{Binding SelectedAuthenticationMethod, Mode=OneWay}"/>
</ContentControl>
</Grid>
</Grid>
</UserControl>
我想将 FocusedElement 绑定到 ElementName=LoginTextBox。我该怎么做?有可能吗?
Is it possible at all?
否,因为名称“LoginTextBox”仅在定义了 ComboBox
的 DataTemplate
中可用。
Grid
驻留在另一个 XAML namescope 中,它对定义 LocalAuthenticationMethod
对象的视觉外观的各个元素一无所知。
我想从 UserControl 绑定到 DataTemplate。
但是我得到错误
Cannot find source for binding with reference 'ElementName=LoginTextBox'. BindingExpression:(no path); DataItem=null; target element is 'Grid' (Name=''); target property is 'FocusedElement' (type 'IInputElement')
我的代码
<UserControl>
<UserControl.Resources>
<DataTemplate DataType="{x:Type models:LocalAuthenticationMethod}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="72"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" VerticalAlignment="Center"
Text="{uiCommon:LocalizationBinding ResourceName=Login}"
FontSize="{DynamicResource LoginWindowPropertiesFontSize}"/>
<!-- bind to here -->
<ComboBox x:Name="LoginTextBox"
Grid.Column="1"
Height="24"
Text="{Binding ElementName=Root, Path=DataContext.Login, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"
ItemsSource="{Binding ElementName=Root, Path=DataContext.AvailableUsers, Mode=OneWay}"
IsEditable="True"
behavior:FocusAdvancement.AdvancesByEnterKey="True"
FontSize="{DynamicResource LoginWindowPropertiesFontSize}">
<b:Interaction.Behaviors>
<behavior:SelectTextOnGotFocusBehavior/>
<behavior:SelectTextOnTargetUpdatedBehavior/>
</b:Interaction.Behaviors>
</ComboBox>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="Root">
<!-- how to bind here? -->
<Grid FocusManager.FocusedElement="{Binding ElementName=LoginTextBox}">
<ContentControl>
<ContentPresenter Content="{Binding SelectedAuthenticationMethod, Mode=OneWay}"/>
</ContentControl>
</Grid>
</Grid>
</UserControl>
我想将 FocusedElement 绑定到 ElementName=LoginTextBox。我该怎么做?有可能吗?
Is it possible at all?
否,因为名称“LoginTextBox”仅在定义了 ComboBox
的 DataTemplate
中可用。
Grid
驻留在另一个 XAML namescope 中,它对定义 LocalAuthenticationMethod
对象的视觉外观的各个元素一无所知。