小编Vik*_*ing的帖子

使用DoubleAnimation设置图像不透明度

这应该是相当简单的,但我似乎无法做到正确.我有一个集合System.Windows.Controls.Image.当我选择其中一个时,我希望所有其他人都能获得不透明度0.5.我正在使用MVVM,这背后的逻辑(找到所选图像并将其设置为Enabled)已完成ViewModel,并且正在运行.所以基本上这是有效的:

<Image Grid.Row="0" Source="{Binding ItemImage}" IsEnabled="{Binding ItemImageEnabled}">
<Image.Style>
    <Style TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled"  Value="False">
                <Setter Property="Opacity" Value="0.5"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Opacity" Value="1.0"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Image.Style>
</Image>
Run Code Online (Sandbox Code Playgroud)

现在我想的不透明度转变到进行动画,从衰落它1.00.5当没有选择图像,和从衰落0.51.0当它.我会想到这会工作:

<Image Grid.Row="0" Source="{Binding ItemImage}" IsEnabled="{Binding ItemImageEnabled}">
<Image.Style>
    <Style TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled"  Value="False">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.5" BeginTime="0:0:0" Duration="0:0:1"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
            <Trigger Property="IsEnabled" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity" …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml mvvm doubleanimation

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

不一致的可访问性不易访问

我已经搜索过类似错误的答案,但一直找不到.此外,我知道如何修复错误(让所有公开 - 我真的不想做),但我真的不明白为什么这是不允许的.无论如何 - 我得到了

可访问性不一致:属性类型"E7XLibrary.Base.MultiSegmentBase"的可访问性低于属性"E7XLibrary.E7XGroupBase.GroupSegment"

我的MultiSegmentBase类被声明为内部类(SegmentBase类也是如此):

internal class MultiSegmentBase : SegmentBase
Run Code Online (Sandbox Code Playgroud)

我在我的公共E7XGroupBase类中使用MultiSegmentBase实例作为受保护的抽象属性:

public abstract class E7XGroupBase
{
    internal abstract UInt64 Length { get; }
    protected abstract MultiSegmentBase GroupSegment { get; }

    internal virtual void Wrap(BinaryWriter writer)
    {
        GroupSegment.Length = this.Length;
        GroupSegment.Wrap(writer);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后我有一个分离的公共类E7XSessionGroup类,它实现了抽象的E7XGroupBase,就像这样

public class E7XSessionGroup : E7XGroupBase
{
    #region Properties
    private SessionGroupSegment _groupSegment = null;
    protected override MultiSegmentBase GroupSegment
    {
        get
        {
            if (_groupSegment == null)
                _groupSegment = new SessionGroupSegment();
            return _groupSegment;
        }
    }
Run Code Online (Sandbox Code Playgroud)

正如我所说的,我知道如果我只是将MultiSegmentBase声明为公共类而不是内部类,我就不会有这个错误,但是因为我正在创建一个API,所以我不想暴露MultiSegmentBase然后进一步展示所有类派生自MultiSegmentBase.

基本上,我的问题是为什么当我只在受保护的属性中使用MultiSegmentBase时,MultiSegmentBase需要像E7XGroupBase和E7XSessionGroup一样可访问?你们中的任何人都有一个很好的解决方法吗?

c#

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

标签 统计

c# ×2

doubleanimation ×1

mvvm ×1

wpf ×1

xaml ×1