我正在尝试在状态信息Popup中托管多行TextBox,以显示只读,多行,可滚动的信息。以下XAML都运行良好,但文本无法选择(因此用户可以复制它)。
<!-- Status info popup -->
<Popup AllowsTransparency="True" PopupAnimation="Fade" Placement="Center" StaysOpen="False"
PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type v:ModuleView}}}"
IsOpen="{Binding ShowingStatusInformation}">
<Border CornerRadius="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="Status Information"
Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" />
<Button Content="OK" IsDefault="True" Command="{Binding ToggleStatusInfoCommand}"
HorizontalAlignment="Right" Margin="0 5" Padding="20 3"
Grid.Column="1" Grid.Row="0" VerticalAlignment="Center">
<Button.CommandParameter><sys:Boolean>False</sys:Boolean></Button.CommandParameter>
</Button>
<TextBox IsReadOnly="True" Text="{Binding StatusInformation}"
Margin="6 6 6 3" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1"
TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"
MaxHeight="300" />
</Grid>
</Border>
</Popup>
视图模型上的相应属性:
public string StatusInformation
{
get { return _statusInformation; }
set
{
_statusInformation = value;
_propertyChangedHelper.NotifyPropertyChanged(this, () => StatusInformation);
}
}
public bool ShowingStatusInformation
{
get { return _showingStatusInformation; }
set
{
_showingStatusInformation = value;
_propertyChangedHelper.NotifyPropertyChanged(this, () => ShowingStatusInformation);
}
}
托管Popup中的文本框是否会以某种方式禁用文本选择,或者我的绑定是否存在问题?我正在替换托管在模式窗口中的TextBox,文本可以选择。
更新:这种情况发生在.NET 3.5应用程序中,WPF托管在Win Forms容器中。
答案 0 :(得分:0)
您的控件在什么时候实例化 - 在winforms控件的构造函数中或稍后?也许你可以尝试Loaded或ControlCreated。
听起来有点像没有调用ElementHost.EnableModelessKeyboardInterop时发生的事情,但是弹出窗口无法调用它。
解决方法可能是添加“复制”按钮......