我试图实现类似于iPhone消息视图的东西.在按钮上单击,删除按钮将滑出每个消息,单击"完成"删除按钮将滑入.我已经能够使用mvvm实现,除了滑动效果.这是我用我有限的知识写的风格:
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding ShowDeleteButton}" Value="false">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
这里"ShowDeleteButton"是视图模型中的bool属性.这很好用.但是崩溃和"变得可见"正在突然而且非常快地发生.我需要一些滑动动画.请注意,当删除按钮消失时,其余控件应占用剩余空间,并且当按钮出现时,现有控件应缩小并为按钮提供空间.我试过故事板动画,但即使几个小时后我也无法弄清楚它投掷的奇怪错误.这是代码:
<DataTrigger Binding="{Binding ShowDeleteButton}" Value="false">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard BeginTime="0:0:1">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visiblity">
<DiscreteObjectKeyFrame Value="{x:Static Visibility.Collapsed}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard BeginTime="0:0:1">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visiblity">
<DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)
有人可以帮助陷入困境的灵魂吗?
问候
我使用Microsoft.Windows.Shell dll创建了一个带自定义chrome的WPF窗口.这是代码:
<Style TargetType="Window" x:Key="ChromeLessWindowStyle">
<Setter Property="shell:WindowChrome.WindowChrome">
<Setter.Value>
<shell:WindowChrome
GlassFrameThickness="0"
ResizeBorderThickness="5"
CornerRadius="5"
CaptionHeight="30">
</shell:WindowChrome>
</Setter.Value>
</Setter>
<Setter Property="WindowStyle" Value="None"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Grid Background="#FF595959" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Height="30" Background="#FF393939">
<DockPanel LastChildFill="False" Margin="0,1,5,0">
<TextBlock DockPanel.Dock="Left" Style="{DynamicResource {x:Static coreKeys:TextBlockKeys.Default}}" FontWeight="Bold" Text="{TemplateBinding Title}" Margin="10,0,0,0" VerticalAlignment="Center"/>
<!--Buttons-->
<Button DockPanel.Dock="Right" behaviors:WindowCommandBehaviors.IsCloseButton="True" Style="{DynamicResource {x:Static coreKeys:ButtonKeys.Close}}" shell:WindowChrome.IsHitTestVisibleInChrome="True"/>
<Button DockPanel.Dock="Right" behaviors:WindowCommandBehaviors.IsMaximizeButton="True" Style="{DynamicResource {x:Static coreKeys:ButtonKeys.Maximize}}" Visibility="{TemplateBinding WindowState,Converter={StaticResource WindowStateToVisibilityConverter},ConverterParameter=MaximizeButton }" shell:WindowChrome.IsHitTestVisibleInChrome="True" />
<Button DockPanel.Dock="Right" behaviors:WindowCommandBehaviors.IsMaximizeButton="True" Style="{DynamicResource {x:Static coreKeys:ButtonKeys.Restore}}" Visibility="{TemplateBinding WindowState,Converter={StaticResource …Run Code Online (Sandbox Code Playgroud) 从数码相机中提取的图像通常超过2-3 MB,这使得它很难通过电子邮件和其他方式传输.这需要调整图像大小(根据文件大小而不是高度或宽度).与MS Paint提供图像大小调整功能非常相似.我对图像文件理论没有很好的教育.如果有人能指出我关注以下信息,我将不胜感激:
图像理论(各种图像格式如何工作jpeg,png,tiff等).
调整大小后图像如何失去清晰度?有一些吗?
有没有免费的.Net(我使用的是4.0)库可以这样做吗?如果没有,我可以使用任何使用com interoperabilty的库吗?
非常感谢,
这是一个非常流行的概念:Ioc(控制反转).我已经使用这个概念很长一段时间了.通常我会使用DI(而不是服务定位器)方法在我的代码中实现IoC.以下是我对IoC的理解.
如果classA依赖于classB,如果它在其中声明了classB的实例.它依赖于classB,由于某种原因(我稍后会谈到),不好,因此我们使用DI来解决这个问题.所以现在我们有一个名为IClassB的接口,它将在classA的构造函数中传递(我在这里采用构造函数注入,为了说明).这里是代码:
public class ClassA
{
IClassB _classBObj = null;
public ClassA(IClassB classBObj)
{
_classBObj = classBObj;
}
public void UseClassBMethod()
{
this._classBObj.classBMethod();
}
}
public class ClassB:IClassB
{
public void classBMethod()
{
//Some task carried out by classB.
}
}
public interface IClassB
{
void classBMethod();
}
Run Code Online (Sandbox Code Playgroud)
这里有代码使它运行:
class Program
{
static void Main(string[] args)
{
//This code is outside of class A and hence declaring
//object of ClassB is not dependency
ClassA classA=new ClassA(new ClassB);
classA.UseClassBMethod();
}
} …Run Code Online (Sandbox Code Playgroud) architecture design-patterns dependency-injection inversion-of-control
我有一个像下面这样的字符串数组:
"access"
"Addition"
"account"
"base"
"Brick"
"zammer"
"Zilon"
Run Code Online (Sandbox Code Playgroud)
我希望他们按照以下规则对它们进行排序"
因此,输出应该是:
"Addition"
"access"
"account"
"Brick"
"base"
"Zilon"
"zammer"
Run Code Online (Sandbox Code Playgroud)
我使用的语言是C#和.Net 4.0.
我正在从一个教程中学习TPL(async/await),我尝试使用控制台应用程序自己测试它.请不要被我的无知冒犯.我确定我在某处做错了 - 我写了下面的代码:
static void Main(string[] args_)
{
Task<int> task = ProcessNumber(25);
Console.WriteLine(string.Format("{0}: Waiting started...", DateTime.Now));
task.Wait();
Console.WriteLine(string.Format("{0}: Waiting ended...", DateTime.Now));
Console.WriteLine(task.Result);
Console.WriteLine("Press any key to terminate!");
Console.ReadLine();
}
static async Task<int> ProcessNumber(int i_)
{
Thread.Sleep(1000);
var integer = await IncrementNumber(i_ * 23);
return integer;
}
static async Task<int> IncrementNumber(int j_)
{
Thread.Sleep(6000);
return (j_ + 23) / 23;
}
Run Code Online (Sandbox Code Playgroud)
这是普通的C#控制台代码.我的问题是为什么我得到以下输出:
3/5/2015 5:22:37 PM: Waiting started...
3/5/2015 5:22:37 PM: Waiting ended...
26
Run Code Online (Sandbox Code Playgroud)
"等待开始"和"等待结束"之间是否应该有相当大的时间差距?
UPDATE
在答案之后,我发现Task.Delay(..)和Thread.Sleep(..)不一样,因为它们的工作方式完全不同.这是一个很好的链接,用一个例子来解释.
似乎将TPL视为多线程的另一个框架是错误的.所有的答案都对我有所帮助,所以我投票给了所有人.但是,我选择Jon的答案,因为它是最具说明性的,也是第一个出现的答案.谢谢大家!