我试图private
通过反射检索属性的值
// definition
public class Base
{
private bool Test { get { return true; } }
}
public class A: Base {}
public class B: Base {}
// now
object obj = new A(); // or new B()
// works
var test1 = typeof(Base).GetProperty("Test", BindingFlags.Instance | BindingFlags.NonPublic);
if(test1 != null) // it's not null
if((bool)test1.GetValue(obj, null)) // it's true
...
// doesn't works!
var test2 = obj.GetType().GetProperty("Test", BindingFlags.Instance | BindingFlags.NonPublic);
if(test2 != null) // is null ! …
Run Code Online (Sandbox Code Playgroud) 第二天打这个问题.
要重现,请创建新的WPF应用程序xaml
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<Button Width="100" Height="100" MouseMove="Button_MouseMove"/>
<Popup x:Name="popup" StaysOpen="False" AllowsTransparency="True" Placement="Center">
<TextBlock>Some random text</TextBlock>
</Popup>
<CheckBox IsChecked="{Binding (Popup.IsOpen), ElementName=popup}">Popup</CheckBox>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
和代码
private void Button_MouseMove(object sender, MouseEventArgs e)
{
popup.IsOpen = true;
}
Run Code Online (Sandbox Code Playgroud)
鼠标悬停按钮打开弹出窗口,单击其他位置关闭.单击按钮有bug:popup是IsOpen == true(可以在复选框上看到或在处理程序中有断点),而它是不可见的.
WTF?
而我的原始问题似乎是什么设置IsOpen
不是即时的.为了例如,当我尝试将它设置为false
中Popup
的MouseMove
事件,然后我得到MouseEnter
与MouseMove
事件Button
期间解雇权
IsOpen = true;
Run Code Online (Sandbox Code Playgroud)
与设置相同,会发生true
2(!)个MouseMove
事件,将此行放入事件处理程序以查看它
System.Diagnostics.Trace.WriteLine("M");
Run Code Online (Sandbox Code Playgroud)
在VS 的输出窗口中将有2 M ,而Popup
(当StayOpen=false
)假设捕获鼠标事件时,它会,但不是立即.
有人可以解释一下它发生了什么吗?我希望 …
我有多个视图(用户控件),每个视图都有自己的ViewModel
. 为了在它们之间导航,我使用按钮。按钮显示来自相应视图模型的图像和文本,并且还需要列和行(因为有 10 个视图:10 个列,每个列的行数不同)。
现在按钮是动态创建的(我为此做了一个Navigator
控件),对于视图模型,我有基类来保存文本、图像、列和行。可用的视图数量会有所不同(取决于用户级别和某些设置),这就是我需要在这里进行控制的原因。
问题:我的控件如何从视图模型中获取数据?
现在我有 interface INavigator
,在(lol)控件本身中定义。并且视图模型实现了它。我可以去对面,让我的控制,以了解有关视图模型。两者看起来都不对。
有一个Navigator
控件,可以说,Items
绑定到视图模型列表。它可以将每个视图模型投射到INavigator
或ViewModelBase
(所有页面通用)以获取特定的视图模型图像、文本、列和行。因此,要么视图模型知道控制(实现INavigator
),要么控制知道ViewModelBase
.. 这是一个问题,这两个解决方案都绑定了紧密的控制和视图模型,这在mvvm
.
示意图
如果我有大量收藏并且我关心性能,我是否应该相信奇迹并使用
var min = Y.Min();
var max = Y.Max();
Run Code Online (Sandbox Code Playgroud)
或者我最好成为一名优秀的工程师并使用
var max = double.NegativeInfinity;
var min = double.PositiveInfinity;
foreach(var y in Y)
{
if(y > max)
max = y;
if(y < min)
min = y;
}
Run Code Online (Sandbox Code Playgroud)
Y
是ICollection<double>
,因为我需要Count
和foreach
。我很好奇类型是否正确,因为最小/最大,并且我需要从末尾迭代集合,所以会有
Y.OrderByDescending((o) => o)...
Run Code Online (Sandbox Code Playgroud) 是否有可能有DropShadowEffect
到忽略渲染阴影时,某些颜色?有一种蒙面(颜色选择性)阴影?
我的问题是可以将阴影分配给整个视觉元素(图形).它看起来像这样:
而且我要
注意没有阴影的网格线(除了0,0
一些).这可以通过在缩放/偏移图中具有2个同步来实现,一个没有阴影效果包含网格而另一个阴影包含其余部分.但我对这个解决方案并不是很满意(我预测未来会有很多问题).所以我宁愿以DropShadowEffect
某种方式修改.
我可以创建和使用ShaderEffect
,但我不知道如何编写着色器以获得实际的阴影效果(如果它可以由着色器生成).
也许有更容易的方式与DropShadowEffect
自己做一些事情?任何人?
我试着制作着色器效果:
sampler2D _input : register(s0);
float _width : register(C0);
float _height : register(C1);
float _depth : register(C2); // shadow depth
float4 main(float2 uv : TEXCOORD) : COLOR
{
// get pixel size
float2 pixel = {1 / _width, 1 / _height};
// find color at offset
float2 offset = float2(uv.x - pixel.x * _depth, uv.y - pixel.y * _depth); …
Run Code Online (Sandbox Code Playgroud) 这让我困扰了将近一年.我会更新答案并添加赏金.
我有自定义控件,它具有依赖属性
public class Graph : Control
{
public List<Figure> Figures
{
get { return (List<Figure>)GetValue(FiguresProperty); }
set { SetValue(FiguresProperty, value); }
}
public static readonly DependencyProperty FiguresProperty =
DependencyProperty.Register("Figures", typeof(List<Figure>), typeof(Graph),
new PropertyMetadata((d, e) => ((Graph)d).InvalidateVisual()));
...
}
Run Code Online (Sandbox Code Playgroud)
Figure
是所有数字的基类:
public abstract class Figure { ... }
public class LineFigure : Figure { ... }
public class XGridFigure : Figure { ... }
public class YGridFigure : Figure { ... }
...
Run Code Online (Sandbox Code Playgroud)
现在看下面的截图来看问题:有时候(在其他地方对xaml进行更改之后)设计师对它疯狂并停止渲染整个窗口,抛出异常,而代码编译并运行没有问题.我可以关闭这个xaml(设计师)并再次打开它以使问题消失.但它总是重新出现.
问题:我身边有什么问题吗?缺少属性?错误的用法?我该如何解决这个问题?
丑陋的情况. …
例如,对于一般类型,它在构造函数中订阅一些事件:
class SomeType
{
public SomeType(...)
{
someEvent1 += ...
someEvent2 += ...
}
}
Run Code Online (Sandbox Code Playgroud)
我在哪里取消订阅活动?
IDisposable
?DontForgetToCallMeSoICanUnsubscribeFromEvents()
?我知道这要看情况。对于控件(wpf、winforms),有一些事件可用于订阅/取消订阅,例如Loaded
/ Unloaded
、HandleCreated
/HandleDestroyed
等。但是如果父级是一个简单的怎么办object
?
还有一些更具体的示例:嵌套 ViewModel,其中每个级别都是一个List<NextLevelVM>
,在任何级别 ViewModel 都可以被删除,这是否意味着每个 ViewModel 必须实现IDisposable
(如果是正确的方式)它调用Dispose
列表中的每个项目?我尝试使用弱事件,但效果并不好。
我正在尝试分析wpf应用程序(以加快ListView
显示复杂的多列datatemplated项目)。我在理解应用程序时间表报告中的数据时遇到了问题:
说明说:
这是此列模板(xaml):
<GridViewColumn Header="Header">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<StackPanel Orientation="Horizontal">
Run Code Online (Sandbox Code Playgroud)
问题:
ContentPresenter
7.5毫秒在做什么?我有2个这样的课程
class A: Base
{
public string CommonField;
public int IntField;
}
class B: Base
{
public string CommonField;
public double DoubleField;
}
Run Code Online (Sandbox Code Playgroud)
我A
使用类型名称处理序列化实例
{
"$type": "MyApp.A, MyApp",
"CommonField": "SomeValue",
"IntField": 123,
"SomeBaseField": 321
}
Run Code Online (Sandbox Code Playgroud)
从中获取B
实例的最简单方法是什么?在问为什么之前,它是关于导入A
为的B
(它们具有基本属性,并且您所看到的名称匹配,因此此操作是合理的)。
试图反序列化给定的json B
将抛出
Newtonsoft.Json.JsonSerializationException: Type specified in JSON 'MyApp.A, MyApp, Version=0.0.1.1, Culture=neutral, PublicKeyToken=null' is not compatible with 'MyApp.B, MyApp, Version=0.0.1.1, Culture=neutral, PublicKeyToken=null'. Path '$type', line 2, position 42.
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolveTypeName(JsonReader reader, Type& objectType, JsonContract& contract, JsonProperty …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种ResourceDictionary
在项目之间共享的方法。
将新项目添加到共享项目不提供资源字典。它可以在其他(主)项目中创建并拖动。但是我无法将其构建选项更改为Page:
这个想法是像这样加载资源字典
var dictionary = new ResourceDictionary();
dictionary.Source = new Uri("/WpfApplication91;component/Dictionary2.xaml", UriKind.Relative);
Run Code Online (Sandbox Code Playgroud)
目前这显然失败了
“System.IO.IOException”类型的异常出现在PresentationFramework.dll中,但未在用户代码中处理
附加信息:无法找到资源“dictionary2.xaml”。
有任何想法吗?