«Не удается найти ресурс с именем» при использовании конвертера в определении окна - PullRequest
1 голос
/ 27 марта 2020

В моей модели представления есть свойство, которое называется AreProcessesRunning. Когда процессы запущены, я хочу отключить мое окно, чтобы пользователь не мог ничего щелкнуть и не мог закрыть окно.

В следующем коде я могу использовать InverseBooleanConverter для IsEnabled для Grid. Когда я использую его для IsEnabled для окна, я получаю сообщение об ошибке «Не удается найти ресурс с именем« InverseBooleanConverter ». Имена ресурсов чувствительны к регистру».

Есть ли способ обойти это?

Я мог бы создать свойство с именем ProcessesAreNotRunning и просто привязать его непосредственно к нему. Это работает, но кажется странным свойством создавать.

<Window
    IsEnabled="{Binding AreProcessesRunning, Converter={StaticResource InverseBooleanConverter}, Mode=OneWay}">


    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/MyProject;component/Resources.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

    <Grid
        IsEnabled="{Binding AreProcessesRunning, Converter={StaticResource InverseBooleanConverter}, Mode=OneWay}">

1 Ответ

1 голос
/ 27 марта 2020

Это потому, что свойство IsEnabled окна установлено до загрузки ResourceDictionary.

Либо переместите ресурс в App.xaml, либо попытайтесь установить IsEnabled свойство после вы устанавливаете свойство Resources:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyProject;component/Resources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
<Window.IsEnabled>
    <Binding Path="AreProcessesRunning"
             Converter="{StaticResource InverseBooleanConverter}"
             Mode="TwoWay" />
</Window.IsEnabled>

Третий вариант - создать новый экземпляр преобразователя напрямую, без использования ресурса:

<Window.IsEnabled>
    <Binding Path="AreProcessesRunning"
             Mode="TwoWay">
        <Binding.Converter>
            <local:InverseBooleanConverter />
        </Binding.Converter>
    </Binding>
</Window.IsEnabled>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...