我正在使用WPF Popup控件,它将背景显示为黑色.我把StackPanel放在它里面,背景="透明",但这没有帮助.
<Popup PlacementTarget="{Binding ElementName=parentStackPanel}" Placement="Center"
IsOpen="False" Name="m_popWaitNotifier" PopupAnimation="None"
AllowsTransparency="False">
<StackPanel Orientation="Vertical" Background="Transparent">
<uc:CircularProgressBar x:Name="CB" StartupDelay="0"
RotationsPerMinute="20"
Height="25" Foreground="White"
Margin="12"/>
</StackPanel>
</Popup>
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何使Popup背景透明(或任何颜色)?
我正在尝试构建一些代码来动态排序Linq IQueryable <>.
显而易见的方法是在这里,使用字符串字符串对列表进行排序
http://dvanderboom.wordpress.com/2008/12/19/dynamically-composing-linq-orderby-clauses/
但是,我想要一个更改 - 编译字段名称的时间检查,以及使用重构/查找所有引用来支持以后的维护的能力.这意味着我想将字段定义为f => f.Name,而不是字符串.
对于我的具体用途,我想封装一些代码,这些代码将决定应该根据用户输入使用命名的"OrderBy"表达式列表中的哪一个,而不必每次都编写不同的代码.
这是我写的内容的要点:
var list = from m Movies select m; // Get our list
var sorter = list.GetSorter(...); // Pass in some global user settings object
sorter.AddSort("NAME", m=>m.Name);
sorter.AddSort("YEAR", m=>m.Year).ThenBy(m=>m.Year);
list = sorter.GetSortedList();
...
public class Sorter<TSource>
...
public static Sorter<TSource> GetSorter(this IQueryable<TSource> source, ...)
Run Code Online (Sandbox Code Playgroud)
GetSortedList函数确定要使用哪个命名排序,这会产生List对象,其中每个FieldData包含在AddSort中传递的字段的MethodInfo和Type值:
public SorterItem<TSource> AddSort(Func<T, TKey> field)
{
MethodInfo ... = field.Method;
Type ... = TypeOf(TKey);
// Create item, add item to diction, add fields to …
Run Code Online (Sandbox Code Playgroud) 我看到类似于以下代码的一些原生WPF控件:
static MyControl {
Type typeFromHandle = typeof(MyControl);
// Which is used in various places
SomeProperty.OverrideMetadata(typeFromHandle, ...);
CommandManager.RegisterClassInputBinding(typeFromHandle, ...);
EventManager.RegisterClassHandler(typeFromHandle, ...);
}
Run Code Online (Sandbox Code Playgroud)
似乎以下代码具有相同的性能:
static MyControl {
SomeProperty.OverrideMetadata(typeof(MyControl), ...);
CommandManager.RegisterClassInputBinding(typeof(MyControl), ...);
EventManager.RegisterClassHandler(typeof(MyControl), ...);
}
Run Code Online (Sandbox Code Playgroud)
在JIT代码或运行时期间,这种方法是否提供了任何性能优势?
在我们的WPF应用程序中,我们拥有全球风格TargetType={x:Type ContextMenu}
.我创建了一个派生自ContextMenu的MyContextMenu,但现在默认样式不适用.
如何告诉WPF我希望MyContextMenu从ContextMenu继承默认样式?希望我可以从我的控件本身(通过静态ctor元数据覆盖或其他什么?)中做到这一点,而不必在任何xaml中乱七八糟.
这个问题的灵感来自于这样一个问题:F#在哪些领域"使用时绝对没有意义"?
理论上,应该可以在单个项目中使用任何.NET支持的语言.因为每件事都应该编译成IL代码,然后链接到一个程序集中.
一些好处包括能够在一个类中使用F#,其中F#更适合实现它的功能,C#适用于另一个类.
是否有一些我忽视的技术限制阻止了这种设置?
我想利用for
在DateTime
这样的:
for (DateTime d = _BookedCheckIn; d <= _BookedCheckOut; d.AddDays(1))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
但问题是d
不会增加.有谁知道问题是什么?
情况:我有一个字符串,表示Silverlight中TextBox的DependencyProperty的名称.例如:"TextProperty".我需要获得TextBox的实际TextProperty的引用,它是DependencyProperty.
问题:如果我得到的只是属性的名称,我如何获得对DependencyProperty(在C#中)的引用?
诸如DependencyPropertyDescriptor之类的东西在Silverlight中不可用.我似乎不得不求助于反思来获得参考.有什么建议?
我有一个通用类实现IValueConverter
.就像是:
class MyValueConverter<T> : IValueConverter
Run Code Online (Sandbox Code Playgroud)
使用XAML 2009,我可以像这样使用它:
<my:MyValueConverter x:TypeArguments='x:String'/>
Run Code Online (Sandbox Code Playgroud)
但显然不允许"编译"的XAML(我想我们必须等待.NET 5)
我目前的解决方法是为每种用法进行子类化:
class FooMyValueConverter : MyValueConverter<Foo>
Run Code Online (Sandbox Code Playgroud)
是否可以仅使用XAML 2006在标记中执行此操作?
我使用KeyPress事件以编程方式在自定义RichTextBox中添加文本:
SelectedText = e.KeyChar.ToString();
Run Code Online (Sandbox Code Playgroud)
问题是以这种方式插入文本不会触发CanUndo标志.
因此,当我尝试撤消/重做文本时(通过调用文本框的Undo()和Redo()方法),没有任何反应.
我尝试以编程方式从TextChanged()事件中唤起KeyUp()事件,但仍未将CanUndo标记为true.
如何撤消插入的文本而不必为撤消和重做操作创建列表?
谢谢
我有一个非常基本的PowerShell脚本,可以加载xaml布局.它抛出了这个错误:
用"1"参数调用"Load"的异常:
"无法创建
程序集'PresentationFramework,Version = 3.0.0.0,
Culture = neutral,PublicKeyToken = 31bf3856ad364e35'中定义的'Window'实例.
调用线程必须是STA,因为很多UI组件都需要这个."
我已经多次查看了脚本和xaml文件,但是我没有看到问题出在哪里,并且我无法完全理解我所获得的错误也无济于事.任何帮助将非常感激.谢谢.
Powershell脚本:
Add-Type -AssemblyName presentationframework
$xaml = [xml](Get-Content MainWindow.xaml)
$reader = New-Object System.Xml.XmlNodeReader $xaml
$form = [Windows.Markup.XamlReader]::Load($reader)
$button = $form.FindName('testButton')
$button.Add_Click({
$s = $form.FindName('testBox').Text;
$form.FindName('testLabel').Content = $s;
})
$form.ShowDialog()
Run Code Online (Sandbox Code Playgroud)
Xaml文件:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Grid x:Name="LayoutRoot">
<TextBox x:Name="testBox" HorizontalAlignment="Left"
Margin="26.782,48.626,0,0" TextWrapping="Wrap"
Text="New label text" VerticalAlignment="Top" Width="130.22"/>
<Label x:Name="testLabel" Content="User Search" HorizontalAlignment="Left"
Margin="20.666,22.666,0,0" VerticalAlignment="Top"/>
<Button x:Name="testButton" Content="Change It!" HorizontalAlignment="Left"
Margin="26.782,85,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud) c# ×8
wpf ×4
xaml ×3
.net ×2
f# ×1
for-loop ×1
linq ×1
optimization ×1
popup ×1
powershell ×1
redo ×1
silverlight ×1
undo ×1
winforms ×1