这应该是相当简单的,但我似乎无法做到正确.我有一个集合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.0到0.5当没有选择图像,和从衰落0.5到1.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) 我已经搜索过类似错误的答案,但一直找不到.此外,我知道如何修复错误(让所有公开 - 我真的不想做),但我真的不明白为什么这是不允许的.无论如何 - 我得到了
可访问性不一致:属性类型"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一样可访问?你们中的任何人都有一个很好的解决方法吗?