小编Jam*_*mes的帖子

从隐藏到折叠的可见性中的动画,反之亦然

我试图实现类似于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)

有人可以帮助陷入困境的灵魂吗?

问候

wpf animation styles mvvm

14
推荐指数
1
解决办法
2万
查看次数

带有自定义镶边的WPF窗口在右侧和底部有不需要的轮廓

我使用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)

wpf winapi xaml

9
推荐指数
3
解决办法
1602
查看次数

使用C#调整图像大小

从数码相机中提取的图像通常超过2-3 MB,这使得它很难通过电子邮件和其他方式传输.这需要调整图像大小(根据文件大小而不是高度或宽度).与MS Paint提供图像大小调整功能非常相似.我对图像文件理论没有很好的教育.如果有人能指出我关注以下信息,我将不胜感激:

  • 图像理论(各种图像格式如何工作jpeg,png,tiff等).

  • 调整大小后图像如何失去清晰度?有一些吗?

  • 有没有免费的.Net(我使用的是4.0)库可以这样做吗?如果没有,我可以使用任何使用com interoperabilty的库吗?

非常感谢,

png jpeg tiff gif c#-4.0

7
推荐指数
2
解决办法
3万
查看次数

控制反转和依赖注入

这是一个非常流行的概念: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

4
推荐指数
1
解决办法
554
查看次数

C#中的字符串排序

我有一个像下面这样的字符串数组:

"access"
"Addition"
"account"
"base"
"Brick"
"zammer"
"Zilon"
Run Code Online (Sandbox Code Playgroud)

我希望他们按照以下规则对它们进行排序"

  1. 首先应该是给定角色的大写字母.
  2. 首都和小写字母应按其各自的组排序.

因此,输出应该是:

"Addition"
"access"
"account"
"Brick"
"base"
"Zilon"
"zammer"
Run Code Online (Sandbox Code Playgroud)

我使用的语言是C#和.Net 4.0.

c# linq sorting string

1
推荐指数
1
解决办法
170
查看次数

为什么异步等待不按预期工作

我正在从一个教程中学习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的答案,因为它是最具说明性的,也是第一个出现的答案.谢谢大家!

c# task-parallel-library async-await c#-5.0 .net-4.5

0
推荐指数
1
解决办法
768
查看次数