- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 DataGrid
我用 CellTemplate
和 CellEditingTemplate
.在两个数据模板中 FrameworkElement.IsLoaded Property返回 False
即使我能看到 TextBlock
, 使用 TextBox
和 Focus()
电话已返回 True
.
这是一个错误吗?或者有人可以解释一下,这种行为的原因是什么?
我创建了这个示例应用程序用于演示目的。
MainWindow.xaml.cs
namespace WpfApplication
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new List<string> { "Row1", "Row2" };
}
}
public class FocusAttached
{
public static bool GetIsFocused(DependencyObject obj)
{
return (bool)obj.GetValue(IsFocusedProperty);
}
public static void SetIsFocused(DependencyObject obj, bool value)
{
obj.SetValue(IsFocusedProperty, value);
}
public static readonly DependencyProperty IsFocusedProperty =
DependencyProperty.RegisterAttached("IsFocused", typeof(bool), typeof(MainWindow), new UIPropertyMetadata(false, IsFocusedChanged));
static void IsFocusedChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
FrameworkElement element = obj as FrameworkElement;
if ((bool)e.NewValue)
{
Console.Write(element);
Console.Write(" IsLoaded=" + element.IsLoaded);
Console.Write(" IsVisible=" + element.IsVisible);
Console.Write(" Focusable=" + element.Focusable);
// here I call Focus()
Console.Write(" Focus() returns:" + element.Focus());
Console.WriteLine(" IsLoaded=" + element.IsLoaded);
}
}
}
}
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:WpfApplication"
Title="Please click on row!" SizeToContent="WidthAndHeight">
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding IsLoaded, RelativeSource={RelativeSource Self}, Mode=OneWay,
StringFormat='TextBlock in CellTemplate: IsLoaded={0}'}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox c:FocusAttached.IsFocused="True"
Text="{Binding IsLoaded, RelativeSource={RelativeSource Self}, Mode=OneWay,
StringFormat='Even after call Focus(): IsLoaded={0}'}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Focusable" Value="False" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="IsEditing" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
</Window>
最佳答案
首先,您的绑定(bind)是无用的,因为 IsLoaded 不是依赖属性。没有通知,文本没有变化。
IsLoaded 是假的,因为它像测量和排列一样被延迟。该元素是可聚焦的、可见的和启用的,因此它可以被聚焦。但不能保证此时元素已经测量和渲染。这些操作在 Dispatcher 中排队。当它们被处理时, IsLoaded 将为真。试试这个:
static void IsFocusedChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
FrameworkElement element = obj as FrameworkElement;
if ((bool)e.NewValue)
{
Console.Write(element);
Console.Write(" IsLoaded=" + element.IsLoaded);
Console.Write(" IsVisible=" + element.IsVisible);
Console.Write(" Focusable=" + element.Focusable);
// here I call Focus()
Console.Write(" Focus() returns:" + element.Focus());
element.Dispatcher.BeginInvoke((Action)(() =>
{
Console.WriteLine(" IsLoaded=" + element.IsLoaded);
}),
System.Windows.Threading.DispatcherPriority.Loaded);
}
}
关于wpf - TextBox.IsLoaded 在可见后返回 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167204/
在我看来MappedByteBuffer.isLoaded()在 Windows 上始终返回 false。当我在 BSD Unix 上测试时,我使用相同的测试数据得到 true。 我应该担心吗?无论我
这里是一些代码以及我基于在 LINQPad 中尝试的假设。任何人都可以确认这是延迟加载的工作方式,并可能提供任何其他见解/链接,以便我了解它在后端的工作方式吗?提前致谢! // Step 1. var
所以我创建了一个幻灯片。幻灯片使用两个重叠的媒体元素来显示图片。过渡只是意味着减少前景元素的不透明度并增加背景元素的不透明度。 问题是图片加载到媒体元素的速度不够快。这会导致口吃并且通常看起来很糟糕。
有人可以解释一下 PersistenceUtil.isLoaded 在 JPA 和 hibernate 的上下文中返回什么吗?我的印象是,它确定该值是否已加载并且可以在无需访问数据库的情况下进行访问。
很难为这个问题找到好的答案/解决方案。 我有一个 POSTS 列表组件,允许删除单个 POST 行。 我正在使用普通的 queryMutation 进行删除: 实现 deletePostById: b
在 DataGrid我用 CellTemplate和 CellEditingTemplate .在两个数据模板中 FrameworkElement.IsLoaded Property返回 False即
如果我将处理程序附加到元素的 Loaded 事件(无论它是在 VS 设计器中还是在代码中),它会将 IsLoaded 属性设置为 true。 例如,我有一个带有两个 TabItem 的 TabCont
我想在 isLoading 状态更改组件时构建测试。 我知道在类组件中有使用 enzyme 做 setState 的方法,但我想知道我在这里怎么做。 const Spacex = () => {
我有一个从大部分只读数据库中提取的 EF5 Code First 项目,因此我对绝大多数查询使用 .AsNoTracking() 以提高性能。 不过我很好奇:我有许多导航属性,有时了解它们是否已经加载
问题: PersistenceUtil.isLoaded 是通过查看哪个 EntityManager 还是 L2 缓存来评估的?所有实体仅由其中之一加载后。 PersistenceUtil.isLoa
我了解如何通过推送显示 ViewController。 但是,如何重新显示已推送且仍在加载但在屏幕上不可见的 View 。 我试过了 BaseView.PresentViewController(Cu
我已经创建了直接在 store.js 文件中分派(dispatch)的操作,以创建“默认”状态。我有一个默认状态属性: isLoading: false 我分派(dispatch)一个使用有效负载进行
我有指示我的应用程序正在加载的微调器。我的应用程序中的许多 reducer 都需要能够将此加载器设置为 true 或 false。 我的假设:该字段需要位于状态树的最顶层。我们称它为 isLoadin
我想知道调用方法PersistenceUnitUtil#isLoaded(Object)的原因是什么。 JPA Documentation说它可以帮助确定属于持久性单元的实体的加载状态,但它也提到了
我有一个正在加载本地 HTML 文件的应用程序。 HTML 文件在 iFrame 中加载 Google map 。该应用程序有一个后退按钮,用于检查 UIWebView.canGoBack 和 UIW
我正在尝试从 @auth0/auth0-react 中模拟出 useAuth0 并遇到返回模拟值的问题。我目前有一个使用 useAuth0 的简单提供程序 import React, { create
如果突变当前正在执行,通常 isLoading() 会返回 true。但是每当我切换选项卡并返回到原始选项卡时,isLoading() 为 false,即使突变仍在运行。有没有另一种方法来检查突变是否
任何人都可以向我解释为什么 RecordArray 状态 isLoaded甚至在调用 ajax 调用的成功方法之前设置为 true。 来自 ember-data 源代码 findAll: func
我正在寻找一种通用的方法来存储 redux 中实体/数据的 isFetching 。目前我使用normalizr并将我的所有实体数据存储在实体哈希中。例如 { people: { ... },
在我的代码中的某处,我遇到了一个错误。我设置了一个断点来尝试看看发生了什么。当我在控制台中检查对象“foo”时,我得到: foo.toString() > "" // all good foo.get
我是一名优秀的程序员,十分优秀!