Trigger that will stop from deleting if a foreign key record is not deleted
As Scott Hodgin pointed out, you can't delete a country meanwhile there are cities belonging to this country.

DELETE FROM Countries WHERE Name = 'Germany';



  Msg 547 Level 16 State 0 Line 1
  The DELETE statement conflicted with the REFERENCE constraint "FK_Cities_Countries". The conflict occurred in database "db", table "dbo.Cities", column 'CountryId'.


You could change NO ACTION by ON DELETE CASCADE

CONSTRAINT FK_Cities_Countries 
    FOREIGN KEY (CountryId) REFERENCES Countries(Id)
    ON DELETE CASCADE


But according to your question you want a trigger that blocks delete action for some Cities if it Country still exists.

CREATE TRIGGER trgCities_Delete
ON Cities
INSTEAD OF DELETE
AS
BEGIN

    DELETE c
    FROM   Cities c
    JOIN   deleted d
    ON     c.ID = d.ID
    WHERE  NOT EXISTS (SELECT 1
                       FROM   Countries
                       WHERE  Id = d.CountryId);
END 


Then when you try to create the trigger you'll receive next error:


  Msg 2113 Level 16 State 1 Line 1
  Cannot create INSTEAD OF DELETE or INSTEAD OF UPDATE TRIGGER 'trgCities_Delete' on table 'Cities'. This is  because the table has a FOREIGN KEY with cascading DELETE or UPDATE.


Humm, that's a catch-22 situation.

Ok, let me remove ON DELETE CASCADE action and now I try to delete some city.

DELETE FROM Cities WHERE Name = 'Barcelona';

SELECT * FROM Cities;

Id | CountryId | Name     
-: | --------: | :--------
 1 |         1 | Berlin   
 2 |         1 | Dresden  
 3 |         2 | Madrid   
 4 |         2 | Barcelona
 5 |         3 | Rome     
 6 |         3 | Milano  


Barcelona is still there. The trigger works as expected. 

Now try to delete 'Spain':

DELETE FROM Countries WHERE Name = 'Spain';



  Msg 547 Level 16 State 0 Line 1
  The DELETE statement conflicted with the REFERENCE constraint "FK_Cities_Countries". The conflict occurred in database "db", table "dbo.Cities", column 'CountryId'.


Catch-22 again. I can't delete Barcelona neither Spain!! That's a bit mental.

Let me suggest another approach. If you need to avoid deletes, flag the affected records using some field and let foreign keys do their job.

ALTER TABLE Cities ADD Blocked int NULL;

UPDATE Cities
SET    Blocked = 1
WHERE  Name = 'Berlin';


Now change the trigger by:

ALTER TRIGGER trgCities_Delete
ON Cities
INSTEAD OF DELETE
AS
BEGIN

    DELETE c
    FROM   Cities c
    JOIN   deleted d
    ON     c.ID = d.ID
    AND    c.Blocked &lt;&gt; 1;

END

DELETE FROM Cities WHERE Name = 'Berlin';
SELECT * FROM Cities;

Id | CountryId | Name      | Blocked
-: | --------: | :-------- | ------:
 1 |         1 | Berlin    |       1
 2 |         1 | Dresden   |       0
 3 |         2 | Madrid    |       0
 4 |         2 | Barcelona |       0
 5 |         3 | Rome      |       0
 6 |         3 | Milano    |       0


Well Berlin still there, now if you want to delete Spain you must delete Madrid and Barcelona before.

DELETE FROM Cities WHERE Name IN ('Barcelona', 'Madrid');
DELETE FROM Countries WHERE Name = 'Spain';
SELECT * FROM Cities;

Id | CountryId | Name    | Blocked
-: | --------: | :------ | ------:
 1 |         1 | Berlin  |       1
 2 |         1 | Dresden |       0
 5 |         3 | Rome    |       0
 6 |         3 | Milano  |       0


dbfiddle here