我可以把一个XAML Style为ListBoxItem中<ListBox.Resources>或<ListBox.ItemContainerStyle>.见代码.
问题是:有什么区别,我更喜欢什么?
<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="0"/>
</Style>
</ListBox.Resources>
Run Code Online (Sandbox Code Playgroud)
要么:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="0"/>
</Style>
</ListBox.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)
有一个我接受的答案,但是看到并想一想这个奇怪的症状:
无论哪种方式都给我这个奇怪的数据绑定警告:找不到用于引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.ItemsControl',AncestorLevel的绑定源= '1'".BindingExpression:路径= HorizontalContentAlignment; DataItem = null ....等.
这是一个隐藏在系统Aero样式某处的绑定,它不是我的.
只有当我使用这两种样式时,此警告才会消失!
我有一个用户控件和默认值HorizontalContentAlignment就是HorizontalAlignment.Stretch。在构造函数中,我将其设置为HorizontalAlignment.Left.
当我使用 UserControl 并HorizontalAlignment.Right在 xaml 中为其提供属性时,将使用该值,即我无法覆盖构造函数中的值。
我可以覆盖在属性OnApplyTemplate,OnRender或Loaded事件。
有没有我应该更喜欢的?
基本上我想避免有人可以更改 usercontrols HorizontalContentAlignment。
对我们的应用程序性能的分析表明,当内存必须由.NET内存管理分配时,CPU使用率达到顶峰.
有一个(巨大的)内存量只是免费但应用程序没有声明,它在已经声称的内存部分中搜索了可用空间.
是否可以配置应用程序以在可能的情况下声明更多内存?
这可能与应用程序托管在Citrix下的事实有关吗?
在WCF应用程序中,我们有一个带有属性的servicecontract:
namespace We.Work {
[ServiceContract(Namespace = "We", Name = "IWork", SessionMode = SessionMode.NotAllowed)]
public interface IWork
Run Code Online (Sandbox Code Playgroud)
具有属性的servicecontract的实现:
namespace We.Work {
[ServiceBehavior(Name = "Work", Namespace = "We",
IncludeExceptionDetailInFaults = true,
InstanceContextMode = InstanceContextMode.PerCall,
ConcurrencyMode = ConcurrencyMode.Multiple,
ReleaseServiceInstanceOnTransactionComplete = false
)]
public class WorkImplementation : IWork
Run Code Online (Sandbox Code Playgroud)
servicehost(用于开发的Windows服务或控制台应用程序)
namespace We.Host {
// ....
workServiceHost = new ServiceHost(typeof(We.Work.WorkImplementation));
workServiceHost.Faulted += new EventHandler(Host_Faulted);
workServiceHost.Open();
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的app.config:
<service behaviorConfiguration="WorkServiceBehaviour" name="We.Work.WorkImplementation">
<endpoint behaviorConfiguration="WorkEndPointBehaviour" binding="wsHttpBinding" bindingConfiguration="WorkWsHttpBindingConfig" name="WorkEndPoint" contract="We.Work.IWork"/>
<host> <baseAddresses> <add baseAddress="http://.../Work.svc"/> </baseAddresses> </host>
</service>
<behaviors>
<endpointBehaviors>
<behavior name="WorkEndPointBehaviour"> …Run Code Online (Sandbox Code Playgroud) 我试图从DataTemplate获取我的SelectedRadioButton.
Wpf Inspector展示了Visual Tree:

并在代码中:
void menu_StatusGeneratorChanged(object sender, EventArgs e)
{
var status = Menu.Items.ItemContainerGenerator.Status;
if (status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
var item = Menu.Items.ItemContainerGenerator.ContainerFromIndex(0);
// item is a ContentPresenter
var control = Tools.FindChild<SelectedRadioButton>(item);
control = Tools.FindAncestor<SelectedRadioButton>(item);
}
}
Run Code Online (Sandbox Code Playgroud)
item是一个ContentPresenter,看到Wpf检查器的图像,我相信从那里我必须能够到达SelectedRadioButton.变量control始终为null.
我在这里错过了什么?我使用这些visualtreehelpers.
我订阅了wpf窗口的Loaded事件:Loaded += loaded;并尝试更改后面代码中某些控件的不透明度.
我注意到在方法loaded中控件还没有被wpf绘制.因此代码没有效果,控件的呈现仅在退出方法后才会发生.
1)是否有其他事件,例如Rendered我可以订阅?
编辑:我刚刚发现有一个OnContentRendered事件和以下代码工作:
虽然动画可能是首选.
protected override void OnContentRendered(EventArgs e)
{
base.OnContentRendered(e);
for (int i = 0; i < 100; i++)
{
Parentpanel.Opacity += 0.01;
Splashscreen.Opacity -= 0.01;
Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null);
Thread.Sleep(50);
}
}
Run Code Online (Sandbox Code Playgroud)
否则,我可能不得不使用一个动画,将usercontrol1的不透明度从0.1更改为1.0,将usercontrol2的不透明度从1.0更改为0.0.
2)你知道这样一个动画的例子吗?
比较以下两种方法:
static async Task<int> DownloadAsync(string url)
{
var client = new WebClient();
var awaitable = client.DownloadDataTaskAsync(url);
byte[] data = await awaitable;
return data.Length;
}
Run Code Online (Sandbox Code Playgroud)
用法: Task<int> task = DownloadAsync("http://stackoverflow.com");
static Task<int> Download(string url)
{
var client = new WebClient();
var task = client.DownloadDataTaskAsync(url);
byte[] data = task.Result;
return Task.FromResult(data.Length);
}
Run Code Online (Sandbox Code Playgroud)
用法:
Task task = new Task(() => Download("http://stackoverflow.com"));
task.Start();
Run Code Online (Sandbox Code Playgroud)
据我所知,两种方法都是异步运行的.我的问题是:
两种方法之间的行为有什么不同吗?
为什么我们更喜欢异步 - 等待其他它是一个很好的模式?
我认为List<T>在我搜索的字段上排序会使搜索更快.假设我在对象模型中有List<Person>10.000和List<Car>10.000.我循环模型中的人员列表,并希望找到具有属性c.Owner == person.Name的Car.
public static Car Car(Model model, Person person)
{
return model.Cars.Find(
delegate(Car c)
{
return c.Owner.Equals(person.Name);
});
}
Run Code Online (Sandbox Code Playgroud)
对财产所有者的汽车列表进行排序不会使循环更快?
我想也许我应该使用,BinarySearch但重载BinarySearch不允许代表.BinarySearch当您必须将要查找的汽车作为参数进行查询时,überhaupt的用途是什么?
我在普通菜单(不是上下文菜单)的列表菜单项中使用 wpf。
使用以下样式,不绘制分隔符:
<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
<Setter Property="Height" Value="2" />
</Style>
Run Code Online (Sandbox Code Playgroud)
Height 的值必须至少为 12,但是这样与 menuitems 的距离太大了。
这里发生了什么?合乎逻辑吗?有解决办法吗?
在视图模型中,我使用工厂:
private async Task<BaseData> InitializeAsync()
{
await InstancesAsync();
await ProjectsAsync();
await AdminAsync();
return this;
}
public static async Task<BaseData> CreateAsync()
{
var ret = new BaseData();
return await ret.InitializeAsync();
}
Run Code Online (Sandbox Code Playgroud)
等待的方法相当明确,例如
var instances = await TaskEx.Run(new Func<List<string>>(() => Agent.GetInstances()));
Run Code Online (Sandbox Code Playgroud)
在wpf视图中,我想在构造函数中设置DataContext:
Loaded += delegate
{
Dispatcher.Invoke(new Action(async () => { DataContext = await BasisGegevens.CreateAsync(); }));
};
Run Code Online (Sandbox Code Playgroud)
虽然它有效,但我感到相当不舒服,因为UI线程在任何地方都可以使用,也可以在等待完成后的回调之后使用.我错过了什么?
另外我不明白如何使用工厂模式,DataContext因为没有Invoke上面我得到一个不同的线程拥有该对象的错误.
编辑:使用Cleary先生的想法我得到:
Loaded += async (object sender, RoutedEventArgs e) =>
{ DataContext = await BaseData.CreateAsync(); };
public static …Run Code Online (Sandbox Code Playgroud) wpf ×7
async-await ×2
c# ×2
styles ×2
xaml ×2
.net ×1
animation ×1
app-config ×1
attributes ×1
find ×1
height ×1
listbox ×1
loaded ×1
menu ×1
opacity ×1
servicehost ×1
sorting ×1
task ×1
visual-tree ×1
wcf ×1
windows ×1